Skip to main content
  1. Posts/

【ssh-agent】リモートサーバーに秘密鍵を置かずにgitのプライベートリポジトリをクローンする

·145 words·1 min
Ssh-Agent Ssh-Add
  1. やりたいこと:リモートサーバーに秘密鍵を置かずにプライベートリポジトリを git clone する
  2. 設定する
  3. 接続する
  4. 参考

やりたいこと:リモートサーバーに秘密鍵を置かずにプライベートリポジトリを git clone する
#

秘密鍵をローカルにのみ保持して、リモートサーバーから github に ssh 接続がしたい!

参考までに以下僕の場合の具体的なシナリオです。

  • github にソースコードを保存しており、本番サーバー(=リモートサーバー A)に github からソースコードを pull したい
  • ソースコードはローカルで編集し、push、pull している
  • ソースコードは github のプライベートリポジトリで管理しているので、本番サーバー上に秘密鍵が必要
  • 秘密鍵はローカルで保持している
  • セキュリティのためにサーバーに秘密鍵を置きたくない
  • ssh-agent を使えば本番サーバーに秘密鍵を置かずに、github に接続できる!!

設定する
#

前提条件は以下のとおりです。

  • $ ssh-keygenでローカルにキーを作成済み
  • github に秘密鍵を登録済み
  • すでにローカルマシンからリモートマシンに ssh 接続ができる状態

まずは SSH Agent Forwarding を使えるようにローカルマシンとリモートマシンを設定します。

  1. ローカルマシンの $ ~/.ssh/configに以下を記入する
Host github     # これは何でも良い。この行では$ ssh githubで接続できるよう設定
    HostName github.com
    User git
    FowardAgent yes     # SSH Agent Forwardingのためにこの行が必要
  1. リモートマシンの/etc/ssh/sshd_configに以下を追記する
    AllowAgentForwarding yes
    どの行に書いても良いと思います。

接続する
#

  1. ローカルマシン上で 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)

  2. リモートマシンに-Aオプションを使って接続する -Aオプションを使うと ssh-agent がうまいことローカルにある秘密鍵でリモートサーバーから github にアクセスしてくれる。(よくわからん)
    $ ssh -A ユーザー名@IPアドレス

  3. リモートマシンから 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"}