【git】GithubにSSH接続する
Githubのリポジトリへのアクセスは、主にhttpsとSSHがある。
一度cloneするだけであればhttps接続で問題ないが、GitHubではSSH接続が推奨されており、アクセスするたびにユーザー名とアクセストークンを入力することも不要になるため、普段から利用するリポジトリへのアクセスはSSHが望ましい。
このSSHの設定方法については既に多数の記事が存在するが、ようやく自分の中で手法が固まったので、まとめ直したものを記載する。
0. SSHキー生成の準備
基本的に、1つの端末に1つ作成するイメージで良いと思う。
Windowsの場合は自分のホームディレクトリに.sshフォルダを作成後、スタートメニューからGit Bashを起動する。
Linuxの場合は、ホームディレクトリでそのまま作業を行う。
1. SSHキー生成コマンド
以下のコマンドを実行する。
$ ssh-keygen -t rsa -C <メールアドレス>
作成先のディレクトリの確認。
デフォルトで問題ないため、そのままEnter
を押す。
Enter file in which to save the key (/c/Users/hitoshi/.ssh/id_rsa):
作成先に既に作成されている場合は以下のメッセージが表示される。
上書きして良いならy
を入力する。
/c/Users/aburi/.ssh/id_rsa already exists. Overwrite (y/n)?
続いてパスフェーズの入力を求められる。
何も入力せずEnter
を入力する。
Enter passphrase (empty for no passphrase): Enter same passphrase again:
パスフェーズを設定するとVS Codeからのpush/pull操作が上手くいきませんでした。
回避方法があると思われますが、個人利用であれば未設定で構わないと思います。
以下のメッセージが表示され、公開鍵が生成される。
Your identification has been saved in /c/Users/hitoshi/.ssh/id_rsa. Your public key has been saved in /c/Users/hitoshi/.ssh/id_rsa.pub. The key fingerprint is: SHA256:<暗号化文字列> The key's randomart image is: +---[RSA 2048]----+ | +o*o | | . *.=. | | O o | | + = = | | .. * o S | |+..+ + = + | |==o . + = | |#... ..o.. | |@O ... E | +----[SHA256]-----+
後半のランダムアートの内容は、生成するごとに変わります。
2. 作成結果確認
.ssh
ディレクトリにid_rsa.pub
が存在していれば成功。
$ ll total 6 -rw-r--r-- 1 hitosh i 197121 1671 2月 3 01:51 id_rsa -rw-r--r-- 1 hitoshi 197121 401 2月 3 01:51 id_rsa.pub -rw-r--r-- 1 hitoshi 197121 405 2月 3 01:35 known_hosts
3. Githubに公開鍵を登録
生成した公開鍵の内容をコピーする。
id_rsa.pub
をテキストエディタで開き中身をコピーするか、以下でコンソールに出力したものをコピーする。
$ cat ~/.ssh/id_rsa.pub
$ clip < ~/.ssh/id_rsa.pub
githubのアカウントの「Settings」ページを開き、「SSH and GPG keys」を選択、「SSH keys」の右側にある「New SSH key」ボタンを押す。
名前は適当に、「<端末名>@<OS名>」のようにすると良いかもしれない。
4. GithubとのSSH接続確認
接続の確認は以下で行う。
$ ssh -T git@github.com
成功すると以下のメッセージが表示される。
Hi <ユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.
5. トラブルシューティング
失敗した場合は、以下を確認する。
1. そもそもネットワークに接続されているか。wifiや有線LANの接続を確認する。
2. Githubに登録したSSH公開鍵の内容。一度削除して登録しなおしてみる。
3. ssh公開鍵の作成内容。暗号化方式が誤っていないかなど。一度.ssh
ディレクトリ内のファイルを削除し、再度作り直してみる。