本記事の内容
本記事では「Macでssh接続でGitHubに接続する方法」について記す.
「説明はいいから,手っ取り早く解決したい」という方はちゃちゃっと解決したいを参照のこと.
※注意※今回の記事ではGitHubのウェブページでの操作もあるため,この記事を読みながら作業をする際は,この記事とは別にウィンドウを増やしてから読まれることをおすすめする.
※過去シリーズはこちら↓
序
GitHubのリモートレポジトリに接続する方法は次の2種類が主流なようだ.
- HTTP接続:要はパスワード認証.
- SSH接続:要は「鍵」による認証.
デフォルトはHTTP接続で,一定時間を置いてgit pull
を実行したりすると(正確にはリモートリポジトリに接続するということ),ユーザー名とパスワードを問われる.
一方で,SSH接続は一度パソコンごとに設定してしまえば,何か問われることもなく楽に接続できる.しかもその設定も大して難しいわけではない.
とはいえ,ssh接続でなければならないわけではないので,SSHの設定をせず,そのままHTTP接続を使っている方もいよう.
しかしながら,2021/8/13からパスワード認証(HTTP接続)が廃止された.
実際,git pull
を実行すると,次のように出てくる.
~% git pull
Username for 'https://github.com': GitHubのユーザー名
Password for 'https://GitHubのユーザー名@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/リポジトリのパス/'(リポジトリのURL)
本記事では,「HTTP接続でGitHubを利用していたけれど,これを期にSSH接続に切り替えよう」という方に向けた,そのやり方を記すものである. 補足
実は”個人アクセストークンによる接続”という手法もあるようだが,個人的に「SSHのほうが分かりやすいし,SSH接続に切り替えれば今回の問題は解決されるし,SSHでいいんじゃね?」と思うので個人アクセストークンについては述べない.気になる方は参考文献を参照してみるとよい.GitHub側はトークンによる認証を推奨しているらしいのだが.
結論
非常に簡単.というか,通常のSSH接続とやることは変わらずに,鍵を作成して,公開鍵をGitHubに登録し,各リポジトリの接続方式をSSHに変更するだけである.
やること
ターミナルでの操作
ターミナルでやることは「鍵を作ること」である.
.ssh
へ移動
cd ~/.ssh
を実行.ホームディレクトリにある.ssh
へ移動する.
鍵の作成
ssh-keygen -t rsa
を実行.鍵に名前をつけたかったら出力に従い,名前をつける.今回はid_git
という名前にした(名前を指定した場合,configに情報を追加の作業が増える.).
すると次のように出力されるはずである.
~% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/ホームディレクトリ/ユーザー名/.ssh/id_rsa): id_git
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_git
Your public key has been saved in id_git.pub
The key fingerprint is:
SHA256:VP8jt8nwZGS91aZXykb3vj5CjlmDqU5rT1PLNWgH7VY パソコンのユーザー名@ホスト名
The key's randomart image is:
+---[RSA 3072]----+
| . |
| . . ...|
| . ..+.E|
| . *+=*|
| S =+@Bo|
| o+&=*.|
| ..o*o* .|
| .ooo.o ..|
| oo.. oo.|
+----[SHA256]-----+
補足
鍵を作る際,名前を指定しなければ,id_rsa
とid_rsa.pub
という鍵が作成される.その場合,以降はid_git
,id_git.pub
をそれぞれid_rsa
,id_rsa.pub
に読み替えていただきたい.
鍵が作成されているかを確認
1-1,1-2をそのまんま実行すると,現在は~/.ssh
にいるはずである.そこでls
コマンドを実行し,次のように出力されていれば成功である.
~% ls
authorized_keys id_git id_git.pub
もちろん,GitHub以外でSSH接続を利用している場合は今回作ったid_git
とid_git.pub
以外にも表示されるはずである. 補足
- RSA暗号の他に
ed25519
という形式の暗号もある.RSAよりもed25519のほうが強固らしいので,ed25519
方式で鍵を作成しても良い.その場合,rsa
の部分をed25519
に変えれば良い.つまり,ssh-keygen -t ed25519
を実行すればよい. - 鍵が本当に作成できているか心配な場合は,次小節の補足に
id_git.pub
の一例を記すので,それと似た文字列がid_git.pub(自分で作成した鍵)
に書かれていることを確認するとよい.
鍵のコピー
id_git.pub(自分でつけた名前)
の内容をメモ(コピー)しておく.
内容を確認するにはcat id_git.pub(自分で作った鍵の名前)
を実行すると,ターミナルにその内容が表示されるので,それをコピーすれば良い. 補足
筆者の場合,id_git.pub
の内容は以下であり,それをコピーする.
~% cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDgY4RCVYcjjOtzyknlzr/ojS0lubob87GmZzbJu1kwMbVD1TiiD6rKGJNzvqXaHDZjQOLJL05lGiu950b6HcBR2a7uJoTHIIOUrD5HwXt/TOp+LcoHEJEQNNYAMWstwi7o2oTsmHINGYvIaue9jbxoOkQ8RaaE+DPriCnZGXFk6ksQEeezOsA/O8Mb6LS31tmgzxR+QbjutPoclmJXl6VvKmlm9n2m0CcW4HX46tf6HW/6cdNI2zNYrfqwxG6sdaXAXbPkWV/1Iru+y/F33NsM720w9bZljHJQnme1MMZiyHiMxm10Fmm/aaTdWKoAQN1T938JJ5enpPtxnJbIAm6fZy0d49fOzHw99meafPW5Yp9+pC20UGDraZcyP8FDxZ1BbNtJOtiEgsGWHgbVGWSy4eZxahiE1Rey4z5gNtDH/hoFvTEanJUcv71z37kkq/WEj8s+4IG2nEoghnqBkOFhzBpJq2xZP9SJfPaxzycAXQ2Qu0nnyq3plQidckA3kE= パソコンのユーザー名@ホスト名
config
に情報を追加
鍵を作成で鍵の名前を指定した際にのみこの作業が必要である.
.ssh
ディレクトリの中にconfig
という名前のファイルを作成し(すでに作成している場合はconfig
を開く),次を追記する.
Host github github.com
HostName github.com
IdentityFile ~/.ssh/id_git(鍵の名前)
User git
GitHubでの操作
GitHubでやることは「作成した鍵を登録する」ということである.
設定画面を開く
設定画面を開く.すると次のような画面が出てくるはずである.
※赤いボックスで隠しているのは筆者のユーザー名。
「New SSH key」をクリック
次の画像にある「New SSH key」をクリック.
「Title」および「Key」を記入
「Title」は何でも良い.自分がわかればそれでOK.
「Key」について,鍵のコピーでコピーしておいたid_git.pub
の内容を貼り付ける.
ここで注意なのが,id_git(自分でつけた鍵の名前)
とid_git.pub(自分でつけた鍵の名前)
の2種類が~/.ssh
に作成されたはずだが,「.pub
」のほうの内容を「Key」に書く.ちなみに,.pub
はpublic,すなわち公開鍵の意味である.
※赤いボックスで隠しているのは筆者のGitHubのユーザー名とパソコンのユーザー名とホスト名。
「Add SSh key」をクリック
クリックしてください.
もう一回ターミナルでの操作
最後にリポジトリの接続方式をSSHに切り替える.SSH接続に切り替えたいローカルリポジトリのディレクトリ内に行き,次の1行を実行すれば良い.
git remote set-url origin XXXX
XXXXの部分は次の画像にある部分である.
※色々個人情報を隠してます。
おしまい
以上のことが終わったら,git pull
を実行してみて,ユーザー名とパスワードを問われなかったら成功.
ちゃちゃっと解決したい
説明はいいから,結局何をやればいいんだ?ということが気になる方もいらっしゃるだろう.
ここでは,説明は省いて何を実行するかを列挙する.
上記を読んでいただいた方はある種のまとめとして本節を読んでいただければと思う.
cd ~/.ssh
を実行.
ssh-keygen -t rsa
を実行.
鍵名を指定したい場合は出力に従って鍵名を指定.指定しなければid_rsa
およびid_rsa.pub
が作成される.
id_rsa(自分で指定した鍵名).pub
の内容をコピー.
cat id_git(自分で指定した鍵名).pub
を実行すれば,鍵の内容を表示することができる.
(※鍵作成時に名前を指定した場合のみ) config
に次を追記する.
Host github github.com
HostName github.com
IdentityFile ~/.ssh/id_git(の名前)
User git
設定画面へアクセス.
「New SSH key」をクリック.
「Title」および「Key」を記入.
Titleは何でもいい.Keyには3.でコピーしたid_git(自分で指定した鍵名).pub
の内容をペースト.
「Add SSH key」をクリック
SSH接続に切り替えたいローカルリポジトリへ行き,git remote set-url origin リポジトリのSSHのURL
を実行.
おしまい
結
今思うと当然なのだが,GitHubへの接続方式を変える,といってもSSH接続するだけであるから,やることとしては通常のSSH接続をする場合と同じである.
つまり,鍵を作成し,公開鍵をGitHub側に保存する,というただそれだけである.
とはいえ,GitHubはリポジトリごとに接続しているので,「HTTP接続からSSH接続に切り替えますよ」という意味のコマンドを一行打つ必要がある.
コメントをする