複数PCから同一GitHubレポジトリにSSH接続する際に調べたこと
プライベート用の
Macbook
Githubアカウント
仕事用の
Macbook
GitHubアカウント
とそれぞれ分けて持っていると、
「仕事用のMacbookで、プライベート用のGitHubアカウントのrepositoryのコードをclone/pushしたい」
というケースもある。
ここら辺がごちゃごちゃしてくると、
「プライベート用のMacbookで、プライベート用のGitHubアカウントのrepositoryのコードをclone/pushしたい」
という操作をするとき、よくgitのエラーに引っかかって、その度にQiitaで解決方法を調べたりしていた。
でも、何度調べてその場で解決しても、また再度同じ問題に出くわした時、また調べないといけなかったりして、ちゃんと原因を理解できていないなと感じていたので、今回改めて SSH接続 について調べてみた。
エラー内容
今回、プライベート用のGitHubアカウントのあるrepositoryを、プライベート用のMacbookに git clone した時、以下のようなエラーになった。
$ git clone git@github.com:masafumi330/sandbox.git
Cloning into 'sandbox'...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
<<< SECRET !! >>>.
Please contact your system administrator.
Add correct host key in ~/.ssh/known_hosts to get rid of this message.
Offending RSA key in ~/.ssh/known_hosts:1
Host key for github.com has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
内容としては、
ホスト側(GitHub)のホストキーが更新されているから、新しいホストキーをあなたのマシンに登録してね
もしかしたら、Man-In-The-Middle攻撃かも知れないから注意してね
という内容。
「Man-In-The-Middle攻撃」については、こちらを参照。
https://jprs.jp/glossary/index.php?ID=0229
新しいホストキーの登録は、
現在自分のマシンに登録しているホストキーの削除
再度SSHでgit clone して、新しいホストキーの登録
の手順で行うことができる。
SSHとは?
「SSH」= 「プロトコル」である。
「プロトコル」とは、「約束事」である。
つまり、SSHとは「コンピュータ間の通信を安全に行うための約束事」であり、その方法である。
クライアントは、公開鍵を渡したサーバーと通信できる
サーバーは、公開鍵から暗号を作成し、その暗号を解読できる秘密鍵を持つクライアントのみ、通信ができる
というメリットがある。
今回行った対応策
SSH鍵の生成とGitHubへの設定を以下の手順で行った。
SSH鍵の生成
// -t rsaは鍵のタイプ、-b 4096は鍵の長さ、-Cはコメントを指定します。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
実行すると、特に保存先を指定しない場合は、
秘密鍵 ~/.ssh/id_rsa
公開鍵 ~/.ssh/id_rsa.pub
に鍵が保存される。
2.GitHubに公開鍵を登録
// 公開鍵をクリップボードにコピー
$ cat ~/.ssh/id_rsa.pub | pbcopy # Macの場合
GitHubのSSHキー登録画面 https://github.com/settings/ssh/new に行き、コピーした公開鍵を登録する。
3.SSH接続のテスト
$ ssh -T git@github.com
実行すると、SSHで接続したリモートサーバーのホスト情報(ホストキー)が~/.ssh/known_hostsに保存される。次回接続時以降は、ホストキーを確認し、同じであれば「信頼できる」と判断して接続が確立される。
同一リモートサーバーに対して複数クライアントからSSH接続したい場合
それぞれのクライアントで作成した公開鍵を、SSH接続したい同一リモートサーバーに配布すれば良い。
今回のケースだと、2台別々のMacbookから同一のGitHubアカウントに対して、SSH接続でcloneやpushを行いたい場合、2台それぞれのMacbookで作成した公開鍵をGitHubに登録すれば良い。GitHubアカウントには、2つの公開鍵が登録されることになる。
まとめ
SSHについて理解することができた。これで次回以降のGitHubのSSH接続の設定手順はスムーズに行えるだろう。
また、業務でもSSHで本番サーバーやテスト環境のサーバーに接続していたし、それを行うために担当者に「本番サーバーにSSH接続したいので、こちらの公開鍵の登録をお願いします」と言っていたが、裏で何をやっていたのか理解することができた。