見出し画像

複数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

新しいホストキーの登録は、

  1. 現在自分のマシンに登録しているホストキーの削除

  2. 再度SSHでgit clone して、新しいホストキーの登録

の手順で行うことができる。

SSHとは?

「SSH」= 「プロトコル」である。
「プロトコル」とは、「約束事」である。

つまり、SSHとは「コンピュータ間の通信を安全に行うための約束事」であり、その方法である。


  • クライアントは、公開鍵を渡したサーバーと通信できる

  • サーバーは、公開鍵から暗号を作成し、その暗号を解読できる秘密鍵を持つクライアントのみ、通信ができる

というメリットがある。

今回行った対応策

SSH鍵の生成とGitHubへの設定を以下の手順で行った。

  1. 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 に行き、コピーした公開鍵を登録する。

SSHキー登録画面

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接続したいので、こちらの公開鍵の登録をお願いします」と言っていたが、裏で何をやっていたのか理解することができた。


いいなと思ったら応援しよう!