概要
GitHubにローカル(Vagrant/CentOS7)からSSH接続を設定するのに、けっこう躓いてしまったので整理。GitHubに公開鍵をセットするのは当然として、ローカル側でいろいろ設定しないといけない。
流れは最後の「まとめ」に整理したが、概ね以下のような留意点あり。
ssh-add
で秘密鍵を登録する必要があるssh-add
に先立ってssh-agent
を実行する必要がある- eval `ssh-agent’で実行する必要がある
- SSHで扱うリポジトリーは、SSHでcloneする必要がある
- SSH接続用のURLの書き方がある
鍵の生成
GitHubへの公開鍵の登録
- ヘッダーメニューのドロップダウンからSettingsを選択
- 左メニューからSSH and GPG keysをクリック
- SSH keysの”New SSH key”ボタンをクリック
- 公開鍵を貼り付け
SSH接続までのトライ・アンド・エラー
ターミナルでのアクセス~エラー
ssh -T
コマンドでアクセスしようとしたところエラーになった。
1 2 3 4 5 6 7 |
[vagrant@localhost ~]$ ssh -T taustation@github.com The authenticity of host 'github.com (13.114.40.48)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,13.114.40.48' (RSA) to the list of known hosts. Permission denied (publickey). |
ssh-addしてもエラー
参考サイトGitHubに接続できないときの対処法より、ssh-add
するがエラー
1 2 3 4 |
[vagrant@localhost ~]$ ssh-add -l Could not open a connection to your authentication agent. [vagrant@localhost ~]$ ssh-add ~/.ssh/id_rsa Could not open a connection to your authentication agent. |
ssh-agentが必要
参考サイトssh-addできなかったときへの対処よりssh-agent
を実行するがうまくいかない。
1 2 3 4 5 6 |
[vagrant@localhost ~]$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-rhbFsGUEFG3R/agent.25793; export SSH_AUTH_SOCK; SSH_AGENT_PID=25794; export SSH_AGENT_PID; echo Agent pid 25794; [vagrant@localhost ~]$ ssh-add ~/.ssh/id_rsa Could not open a connection to your authentication agent. |
直接実行しても内容が表示されているだけらしいので、同サイトにあるとおり、eval `ssh-agent'
を実行してキーが追加された。
1 2 3 4 5 |
[vagrant@localhost ~]$ eval `ssh-agent` Agent pid 25798 [vagrant@localhost ~]$ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/vagrant/.ssh/id_rsa: Identity added: /home/vagrant/.ssh/id_rsa (/home/vagrant/.ssh/id_rsa) |
ターミナルでアクセス
ssh -T
を改めて実行し、(GitHubはシェルでのアクセスができないが)正しく認証されたことを確認。
1 2 3 |
[vagrant@localhost test]$ ssh -T git@github.com Warning: Permanently added the RSA host key for IP address '52.192.72.89' to the list of known hosts. Hi taustation! You've successfully authenticated, but GitHub does not provide shell access. |
既存リポジトリーのcloneができない
ここでGitHub上に既に存在するリポジトリーをcloneしようとしたが、パーミッションで拒否される。
1 2 3 4 5 6 7 |
[vagrant@localhost git]$ git clone ssh://github.com/taustation/test.git test Cloning into 'test'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. |
クローン段階からSSHでもエラー
先の参考サイトGitHubに接続できないときの対処法の後ろの方を読むと、httpsでcloneしたリポジトリーはsshでは扱えないらしい。
そこでhttps認証に倣って以下のコマンドを打ってみるがうまくいかない。
1 2 3 4 5 6 7 |
[vagrant@localhost test]$ git clone ssh://github.com/taustation/test Cloning into 'test'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. |
SSH接続用のURLで接続成功
参考サイトベビーサンになりたいに倣ってURLを書いてみると、やっと接続できた。
1 2 3 4 5 6 7 |
[vagrant@localhost git]$ git clone git@github.com:taustation/test.git Cloning into 'test'... remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (8/8), done. remote: Total 15 (delta 0), reused 3 (delta 0), pack-reused 0 Receiving objects: 100% (15/15), done. |
別のマシンへの鍵の複製
これまでの流れで導入した鍵を別のマシンへ複製し、GitHubへ接続。
~/.ssh/
下にあるid_rsa
とid_rsa.pub
の2つのキーファイルをもう1つのマシンの~/.ssh/
下にコピー。この状態でssh -T
で認証が確認できた。
1 2 3 4 5 6 7 8 |
[vagrant@localhost .ssh]$ ssh -T git@github.com The authenticity of host 'github.com (52.192.72.89)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,52.192.72.89' (RSA) to the list of known hosts. Enter passphrase for key '/home/vagrant/.ssh/id_rsa': Hi taustation! You've successfully authenticated, but GitHub does not provide shell access. |
ただし、cloneやpull/pushなどのコマンドを実行するたびにパスフレーズの入力を求められる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[vagrant@localhost ~]$ git clone git@github.com:taustation/test.git Cloning into 'test'... Warning: Permanently added the RSA host key for IP address '13.114.40.48' to the list of known hosts. Enter passphrase for key '/home/vagrant/.ssh/id_rsa': remote: Enumerating objects: 40, done. remote: Counting objects: 100% (40/40), done. remote: Compressing objects: 100% (27/27), done. remote: Total 40 (delta 5), reused 25 (delta 1), pack-reused 0 Receiving objects: 100% (40/40), 5.91 KiB | 5.91 MiB/s, done. Resolving deltas: 100% (5/5), done. [vagrant@localhost test]$ git pull Enter passphrase for key '/home/vagrant/.ssh/id_rsa': Already up to date. |
そこで、ssh-agent
とssh-add
を実行する。
1 2 3 4 5 |
[vagrant@localhost test]$ eval `ssh-agent` Agent pid 19421 [vagrant@localhost test]$ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/vagrant/.ssh/id_rsa: Identity added: /home/vagrant/.ssh/id_rsa (/home/vagrant/.ssh/id_rsa) |
これで毎回パスフレーズを入力する必要がなくなった。
1 2 |
[vagrant@localhost test]$ git pull Already up to date. |
まとめ
ひとまず、以下の流れでSSH接続を整理。
- ローカルに秘密鍵と公開鍵を生成
- GitHubに公開鍵を設定
eval `ssh-agent`
を実行ssh-add ~/.ssh/id_rsa
で秘密鍵登録ssh -T git@github.com
で認証成功を確認- 既存リポジトリーをSSHでclone
git clone git@github.com:ユーザー名/リポジトリー名.git
- 以後、ワーキングディレクトリー内でSSHで
pull/push
鍵のペアーを他のマシンに複製して同じアカウントにアクセスする場合、
id_rsa
、id_rsa.pub
を他のマシンの~/.ssh/ディレクトリーにコピーeval `ssh-agent`
を実行ssh-add ~/.ssh/id_rsa
で秘密鍵登録