やりたいこと:リモートサーバーに秘密鍵を置かずにプライベートリポジトリを git clone する #
秘密鍵をローカルにのみ保持して、リモートサーバーから github に ssh 接続がしたい!
参考までに以下僕の場合の具体的なシナリオです。
- github にソースコードを保存しており、本番サーバー(=リモートサーバー A)に github からソースコードを pull したい
- ソースコードはローカルで編集し、push、pull している
- ソースコードは github のプライベートリポジトリで管理しているので、本番サーバー上に秘密鍵が必要
- 秘密鍵はローカルで保持している
- セキュリティのためにサーバーに秘密鍵を置きたくない
- ssh-agent を使えば本番サーバーに秘密鍵を置かずに、github に接続できる!!
設定する #
前提条件は以下のとおりです。
$ ssh-keygenでローカルにキーを作成済み- github に秘密鍵を登録済み
- すでにローカルマシンからリモートマシンに ssh 接続ができる状態
まずは SSH Agent Forwarding を使えるようにローカルマシンとリモートマシンを設定します。
- ローカルマシンの
$ ~/.ssh/configに以下を記入する
Host github # これは何でも良い。この行では$ ssh githubで接続できるよう設定
HostName github.com
User git
FowardAgent yes # SSH Agent Forwardingのためにこの行が必要
- リモートマシンの
/etc/ssh/sshd_configに以下を追記する
AllowAgentForwarding yes
どの行に書いても良いと思います。
接続する #
-
ローカルマシン上で ssh-agent に秘密鍵を登録する
$ ssh-add ~/.ssh/id_rsa
僕の場合は id_rsa で鍵を作成したので、~/.ssh/id_rsa を使っています。
鍵が登録されたかどうかを$ ssh-add -lで確認できます。
以下のように鍵が出力されれば OK です。
$ ssh-add -l
4096 SHA256:asdfj;lfd/dast/f8NGWp8asdfjlas foo@bar.com (RSA) -
リモートマシンに
-Aオプションを使って接続する-Aオプションを使うと ssh-agent がうまいことローカルにある秘密鍵でリモートサーバーから github にアクセスしてくれる。(よくわからん)
$ ssh -A ユーザー名@IPアドレス -
リモートマシンから github にアクセスできることを確認して git clone
以下のコマンドを実行して成功のメッセージが出力されれば、リモートサーバーに秘密鍵を置かずに github に ssh 接続できています!
$ ssh -T git@github.com
Hi ~~~! You've successfully authenticated, but GitHub does not provide shell access.
そしたら
$ git clone ~~~
でクローンしちゃいましょう!
参考 #
github のドキュメント{:target="_blank"}