今回はローカルリポジトリとリモートリポジトリがすでにある状態で新たにSSH keyを生成して接続する方法をまとめてみたいと思います。
※exampleは適宜ご自身の環境に置き換えてお試し下さい。
新しいsshキーを作成
ローカルにて以下のコマンドを打ちます。
$ cd /home/exampleuser/.ssh
$ ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair.
上記コマンドのyour_email@example.comはGitHubに登録されているメールアドレスを入力して下さい。
これによりkeyにラベルをつけることが出来ます。
-t ed25519はssh keyを生成するときの暗号化方式の指定をしています。
以下対話形式で入力を求められます。
#ここでなにか入力するとkeyファイルの名前やパスを変更出来ます。
#複数のプロジェクトを管理している場合は名前でわかりやすく保存するのも良いでしょう。
Enter file in which to save the key
#ここでssh keyにパスワードを設定できます。パスワードを設定すると
#例えばgit pushを行った際にここで指定したパスワードを入力しないと
#接続できないようにセキュリティレベルを高めることが出来ます。
#macOSのキーチェーン機能を使える環境ならこのパスワードを
#キーチェーンに設定して自動で接続するというようなことも可能らしいです。※詳細は参考サイト参照
Enter passphrase
#ディレクトリを確認するとファイルが生成されているはずです。
#id_rsaというのはデフォルトでkeyにつけられる名前です。
$ ls
id_rsa #秘密鍵、厳重に管理しなければならない鍵。GitHubなどに上げてしまったら再生成する必要があります。
id_rsa.pub #公開鍵、公開しても良い鍵。次の手順でGitHubに登録をします。
これでローカルにssh keyのペアが作成されました。
keyのファイル名を変更した場合はconfigファイルを作成する必要があります。
保存場所は~/.ssh/configのように拡張子なしのファイルを作成して保存します。
Host github github.com
HostName github.com
IdentityFile ~/.ssh/id_example_rsa #ここに自分の鍵のファイル名
User git
GitHubに公開鍵を設定
1.id_rsa.pubの内容をクリップボードにコピーします。
ローカルで以下のコマンドを打つとコピーできます。
$ cd /home/exampleuser/.ssh
$ pbcopy < id_rsa.pub
#pbcopyがない場合はcatコマンドなどで表示させて選択してコピーします。
$ cat id_rsa.pub
2.GitHubにログインした状態で[画面右上のアイコン]をクリック→[Settings]をクリックします。
3.次に表示された画面で左側にある[SSH and GPG keys]をクリックします。
4.[New SSH key] または [Add SSH key] をクリックします。
5.Titleには後で見たときにわかりやすい内容をつけます。
例)railstutorialfromcloud9
6.keyにクリップボードから貼り付けます。
7.[Add SSH key] をクリックします。
8.GitHub パスワードの確認を促される場合があります。
ここではGitHubにログインするときに使用するパスワードを入力します。
GitHubへの接続を確認
ローカルのリポジトリ(git管理しているフォルダ。.gitなどのディレクトリがあるところ)で
以下のコマンドを打ちます。
$ ssh -T git@github.com
The authenticity of host 'github.com (xxxxxxxxxxx)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
ここで表示されたfingerprintを確認します。
以下のページにて公開されているものと一致するかを確認して下さい。
https://docs.github.com/ja/github/authenticating-to-github/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints
一致していればyesと入力してreturnキーを押します。
Hi example! You've successfully authenticated, but GitHub does not provide shell access.
↑このようなメッセージが表示されたらローカルリポジトリとリモートリポジトリが接続されgit pushやgit pullなどのコマンドが機能するようになるはずです。
エラーが表示された場合
前述のkeyを生成した際に名前を変えていればconfigファイルを設定しているかを確認してみて下さい。
また.sshディレクトリのパーミッションは700
秘密鍵のパーミッションは600に設定しないとエラーが出る場合もあります。
参考サイト
新しい SSH キーを生成 | 本家
GitHub アカウントへの新しい SSH キーの追加 | 本家
[SSH 接続をテストする | 本家]
(https://docs.github.com/ja/github/authenticating-to-github/connecting-to-github-with-ssh/testing-your-ssh-connection)