今回は近日公開予定のGit動画講座に合わせて,GitHubへのSSHログインの設定方法を解説していきたいと思います!
(追記)Git動画講座公開しました!
ローカルリポジトリにて,pullやpush, cloneをしてリモートリポジトリにアクセスするときに,Githubにログインすることになりますが,その際の認証をどうするかって話です.
(なんの話をしているのかわからない人はこちらでまずはGitを学びましょう)
認証の仕方は色々あるのですが,一番簡単なのがusernameとpasswordを指定するだけのhttpsを使ったものです.リポジトリをcloneするときに,httpsのURLかSSHのURLか選べますよね?
SSH設定をしていない場合はHTTPSのタブをクリックして,そのURLをコピーして $git clone 時に貼り付ければいいんですが,
どうやら2021年8月13日以降,このpasswordを使用したhttps認証でのログインができなくなってしまうようです.
詳細はこちら.
これを回避するには,2段階認証や,トークン認証,SSH認証のいずれかの認証方式を使用する必要があるようです.
本記事では,SSH認証でログインするための設定方法を書いていきます.(企業のGithubのリポジトリの多くは最初からhttps認証を許可していないところが大半だと思うので,そういう場合もSSH認証が必要です.)
設定をするのに色々とSSHまわりの知識が必要(なくてもできますが,)なので,「SSHなんてなにも知らないよ!!」という人にもわかるように記事を書いていきます.
なお,概ね公式の手順に沿っていて,所々必要な知識を補足していきます!
SSHとは?
SSHは「Secure Shell」の略で,簡単にいうと”Secure(安全)に”サーバにアクセスする仕組みです.通信途中のデータは全て暗号化されるので安全です.
今回の設定をするのにSSHの詳しい内部の動きを理解する必要は全く無いです.ここではとりあえず,安全にサーバにアクセスする仕組みだと思っておけばOK!(決して説明するのが面倒なわけでは....ない!!)
設定の手順
大まかに言うと以下の二つのことをします.
- ローカルでのSSHキー作成&設定
- SSHキーをGitHubに登録する
それぞれ見ていきましょう!
1.ローカルでのSSHキー作成&設定
1-1.SSHキー作成
SSH認証をするには,SSHキーなるものを作成する必要があります.ここでは秘密鍵と公開鍵の二つを生成して,それらの鍵を使って認証をしていきます.
作り方は簡単!Terminalを開いて $ssh-keygen コマンドで作成しましょう!(カレントディレクトリの場所は問いません)
1 |
$ ssh-keygen -t ed25519 -C "<email address>" |
-t ed25519 は,「Ed25519 というアルゴリズムを使ってSSHキーを作るよ」ってことです. -t ed25519 を指定しなくても問題無いと思います.
実行すると, Enter file in which to save the key (/Users/<username>/.ssh/id_ed25519) と,デフォルトの鍵のファイルの保存場所を聞かれるので問題なければEnterを押し,名前を変えたり場所を変えたい場合は,pathを指定しましょう.
すると Enter passphrase (empty for no passphrase): と出てくるので,なんでもいいのでパスフレーズを入力してください.(すると再度入力を促されるので同じパスフレーズを入力してください.)
これで, ~/.ssh/id_ed25519 と ~/.ssh/id_ed25519.pub が保存されてるはずです. .pub がついている方が公開鍵で,ついていない方が秘密鍵です.
秘密鍵は絶対に他人の手(ローカル以外)に渡らないように注意してください!公開鍵は名前の通り,他の人に見られても問題ないファイルです.
あとの手順でこの公開鍵( ~/.ssh/id_ed25519.pub)をGithubに登録します.
1-2.ssh-agent起動する
ssh-agentを使うのは必須ではないですが,使った方が楽なので今回はssh-agentを使った接続方法を解説します.
ssh-agentは簡単にいうと,秘密鍵を管理してくれるプログラムで,必要なときに必要な鍵を出してくれます.これを用いることによって,先ほど入力したパスフレーズを毎度打つ必要がなくなります.
ssh-agentを起動させるには $eval コマンドを使えばOKです.
1 |
$ eval "$(ssh-agent -s)" |
$eval コマンドは,与えられた文字列をコマンドとして実行するだけです.つまり, $eval "$(ssh-agent -s)" は, $(ssh-agent -s) の戻り値を文字列として受け取って,それをコマンドとして実行しています.試しに $ssh-agent -s を実行してみてください.ssh-agentを起動するのに必要なコマンドが返ってきます. -s オプションはcシェルではなければデフォルトでついてくるので,おそらくみなさんのシェルでは -s オプションはなくてもOKです.
1-3.~/.ssh/configを修正する
ssh接続の設定情報を ~/.ssh/config というファイルに記述します.いままで一度もsshの設定をしたことがない人は, ~/.ssh/config ファイルはないと思うので,新しく作って下さい.
ここではsublコマンドを使ってsublimeで開きます(ファイルがなくても作ってくれます).(sublimeについてはこちら)
1 |
$ subl ~/.ssh/config |
そしたら,以下の内容を記述しましょう
1 2 3 4 |
Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519 |
Host には接続名を書きます.「*」ということは,「いかなる接続名」を意味し,全てのSSH接続にこの設定が使われます.
すでに ~/.ssh/config になんらかの設定を書いている場合は,これでは困るという人もいると思うので,その場合は * ではなく github.com のようにし,「github.comにアクセスするときのみ」という設定にしましょう.また,企業のGithubを使っている場合は,そのURLを指定しましょう.
AddKeysToAgent は,その名の通り,SSH接続時に使った鍵をssh-agentに追加するかどうかを指定します. yes であれば,ssh-agentに追加し,保存されます. UseKeychain はもそのまんまですが,SSH接続時に使ったその鍵を,keychainに保存するかどうかです. yes であれば,keychainに鍵が保存されます.今回は AddKeysToAgent も UseKeychain も yes なので,ssh-agentにもkeychainにも鍵が保存されるということですね.これで,鍵のパスフレーズの入力をスキップすることが可能です.
IdentityFile は,使用する鍵のパスを指定します.ここでは,今回作成したSSHキーの秘密鍵のパス( ~/.ssh/id_ed25519 )を指定します.こうすることで,SSH接続の際に鍵を指定する必要がなくなります.もともと ~/.ssh/config が空だった人は,あまり気にせず上記の内容を ~/.ssh/config に書いてしまっていいでしょう.すでに他の設定をしている人は,その設定とコンフリクトしないように注意しましょう.上述のようにHostを絞るか,他のSSH接続時にも同じ秘密鍵を使うなどの設定が必要です.
1-4.ssh-agentに鍵を登録する
$ssh-add コマンドを使って,鍵をssh-agentに登録します.が,ターミナルを再起動すると登録がリセットされるので -K オプションを付けます.
1 |
ssh-add -K ~/.ssh/id_ed25519 |
1 |
$ssh-add -l |
2.SSHキーをGitHubに登録する
ここまでできたら,あとはGitHubにSSHキー(公開鍵)を登録すればOKです.
イメージとしては,GitHub側には南京錠(公開鍵)を渡しておいて,その鍵(秘密鍵)は自分が持っているような感じです.南京錠(公開鍵)は他の人に渡してしまっても問題ないですからね!
2-1.公開鍵をクリップボードにコピーする
ファイルの中身をクリップボードにコピーするには $pbcopy コマンドを使えばOKです.
1 |
$ pbcopy < ~/.ssh/id_ed25519.pub |
ここでコピーしたファイル(公開鍵)の中身をGitHubのSSHKeyを登録するページに貼り付けます.
2-2.GitHubにSSHキーを登録する
GitHubページにログインし,右上のアイコンをクリックし,Settings -> SSH and GPG keys -> New SSH keyボタンをクリックすると
SSHキーを登録する画面になるので,Titleにはお好きな名前(例えば「○○’s mac book pro」とか)を入力し,Keyに2-1.でコピーした公開鍵を貼り付けます.
そして,Add SSH keyボタンを押せば登録完了です.
これで設定は完了です!
登録ができたら試しにSSHのリンクを使って$git cloneしてみてください!すると,SSH Keysの画面で鍵が正しく使われているのがわかると思います.
(こんな感じ↓)
おわりです!!お疲れ様でした.
それでは快適なSSH生活を〜〜
では!