SSHの設定で困った話

こんにちは!oda@エンジニア1年目です!

先日、学生インターンシップを受け入れる準備として、いくつかのPCで環境構築をして、その内容をドキュメントにまとめていました。

今日はその時に行ったGitHubのSSH設定で学びがあったので、まとめておきたいと思います。

1台目

まずは.sshディレクトリを作成して、そこで秘密鍵と公開鍵を作成します。

以下のコマンドを実行します。

$ ssh-keygen

すると、id_rsa、id_rsa.pubの2つのファイルが作成されます。

id_rsa.pubの中身をコピーして、GitHubのSSH Key作成画面に貼り付けて、SSH Keyを自分のアカウントに追加したら、git cloneします。

インターンで使うリポジトリがクローンできて、無事完了です。

2台目

さて、OSのバージョンが異なる違うPCでも試してみます。

この時、ふと思いました。

「何もしなければ、鍵の名前がデフォルトのid_rsaになる。デフォルトの名前だとすでに作成している人もいるかもしれないし、上書きしてしまったら困るかも。ドキュメントにまとめるなら何か特定の名前をつけておいた方が親切かな。」

調べてみると、ssh-keygenコマンドは-fオプションで、ファイル名を指定することができるようです。

早速、やってみます。

$ ssh-keygen -f intern_key

今度はintern_key、intern_key.pubの2つのファイルが作成されました。

先ほどと同じようにintern_key.pubを使って、GitHubアカウントにSSH Keyを追加します。

さて、準備ができたのでgit cloneをします。

すると、次のようなエラーが出てきました。

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

アクセス権がないか、リポジトリがないか。

OSのバージョンが違うということは、どうやら関係なさそうです。

SSH Keyを追加する時にコピペをミスっていないか、git cloneの時に指定するリポジトリを間違えていないかなど、一つずつ確認していきますが特に問題はありませんでした。

このエラーが出るケースについても調べてみますが、これといった情報は見つけられませんでした。

先輩にこの状況について相談してみると「秘密鍵の情報が設定できていないのでは?」という指摘をいただいたので、早速、その切り口から調べてみます。

.sshディレクトリにconfigファイルを作成することで秘密鍵の情報が設定できるようなので、以下のとおり作成しました。

Host gitub.com
  User git
  IdentityFile ~/.ssh/intern_key

準備が完了したので、再びgit cloneをしてみると今度は無事クローンができました。

1台目と2台目の違いを考察

1台目と2台目の違いは、鍵の名前を指定したかどうかです。

指定しなかった1台目では、なぜ秘密鍵の情報を設定しなくてもうまく認証できたのでしょうか。

これは秘密鍵のパスのデフォルトが~/.ssh/id_rsaであることが理由でした。

1台目の時は鍵の名前を指定せずにデフォルトのid_rsaを使用したため、秘密鍵のパスがデフォルトのまま(=パスを設定しない)でも問題なく認証ができました。

一方で、2台目の時は鍵の名前を変更していたため、デフォルトのパスのままでは秘密鍵が見つからずに認証エラーとなっていました。

さいごに

今回は自分なりに考えて、鍵の名前を変更するという変化を加えてみたところからエラーが発生しましたが、そのおかげですんなり進んだ時には得られなかったであろう知識・経験を得ることができました。

今回得た知識・経験はSSHの設定のほんの一部に過ぎませんが、こういったことを繰り返す中で自分の領域を広げていきたいと思います!