はじめに
GitHubにコードをpush/pullする際、毎回ユーザー名とパスワードを入力するのは面倒ですよね。
SSH鍵を使えば、一度設定するだけでパスワード入力なしで安全にGitHubとやり取りできるようになります。
この記事では、SSH鍵の仕組みから実際の設定手順までを解説します。
1. SSH鍵とは何か
SSH鍵は「公開鍵」と「秘密鍵」のペアで構成されます。
| 鍵の種類 | 保管場所 | 役割 |
|---|---|---|
| 秘密鍵(private key) | 自分のPCのみ | 絶対に他人に渡さない・見せない |
| 公開鍵(public key) | GitHub側に登録 | 誰に見られても問題ない |
イメージとしては、公開鍵は「南京錠」、秘密鍵は「その鍵」です。
GitHub側に南京錠(公開鍵)を渡しておき、自分だけが持っている鍵(秘密鍵)で開錠することで本人確認を行う、という仕組みです。
この仕組みにより、パスワードを毎回送信することなく、安全に認証ができます。
2. 既存のSSH鍵があるか確認する
まずは、すでにSSH鍵を作成済みでないか確認しましょう。
ターミナルを開いて以下を実行します。
ls -al ~/.ssh
以下のようなファイルがあれば、すでに鍵が存在しています。
-
id_rsaとid_rsa.pub -
id_ed25519とid_ed25519.pub
もし何も表示されない、または .ssh ディレクトリ自体が無ければ、次のステップに進んで新しく作成します。
注意: すでに鍵がある場合、新しく作り直すと既存の設定(他サービスとの連携など)に影響することがあるので、心当たりがない限りは新規作成で問題ありません。
3. 新しいSSH鍵を作成する
現在推奨されている ed25519 方式で鍵を作成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
-
-t ed25519: 鍵の方式を指定(高速かつ安全) -
-C: コメント。GitHubに登録しているメールアドレスを入れるのが一般的です
実行すると、以下のように聞かれます。
Enter a file in which to save the key (/Users/you/.ssh/id_ed25519):
そのまま Enterキー を押せばデフォルトの場所に保存されます。特別な理由がなければそれでOKです。
次にパスフレーズの入力を求められます。
Enter passphrase (empty for no passphrase):
これは秘密鍵自体にかけるパスワードのようなものです。設定しておくとより安全です(空欄のままEnterでも作成は可能です)。
これで ~/.ssh/id_ed25519(秘密鍵)と ~/.ssh/id_ed25519.pub(公開鍵)が作成されました。
4. SSH鍵をssh-agentに登録する
ssh-agentは、秘密鍵を管理し、毎回パスフレーズを聞かれないようにしてくれる仕組みです。
まずssh-agentを起動します。
eval "$(ssh-agent -s)"
次に鍵を登録します。
macOSの場合:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Linux / WSLの場合:
ssh-add ~/.ssh/id_ed25519
パスフレーズを設定した場合は、ここで入力を求められます。
5. 公開鍵をコピーする
公開鍵の中身をクリップボードにコピーします。
macOSの場合:
pbcopy < ~/.ssh/id_ed25519.pub
Linuxの場合(xclipが必要):
xclip -selection clipboard < ~/.ssh/id_ed25519.pub
Windows(WSL)の場合:
cat ~/.ssh/id_ed25519.pub | clip.exe
コマンドが使えない場合は、以下でファイルの中身を表示して手動でコピーしても構いません。
cat ~/.ssh/id_ed25519.pub
表示される文字列は ssh-ed25519 AAAA... のような形式です。この全体をコピーします。
6. GitHubに公開鍵を登録する
- GitHubにログインし、右上のアイコンから Settings を開く
- 左メニューの SSH and GPG keys をクリック
- New SSH key ボタンをクリック
- 以下を入力
- Title: 「MacBook Pro」など、わかりやすい名前
- Key type: Authentication Key のまま
- Key: 先ほどコピーした公開鍵を貼り付け
- Add SSH key をクリックして保存
これでGitHub側への登録は完了です。
7. 接続テストをする
正しく設定できたか確認しましょう。
ssh -T git@github.com
初回接続時は以下のような確認メッセージが出ることがあります。
The authenticity of host 'github.com' can't be established.
Are you sure you want to continue connecting (yes/no)?
yes と入力してEnterを押します。
成功すると、以下のようなメッセージが表示されます。
Hi <あなたのユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.
このメッセージが出れば、SSH接続の設定は完了です。
8. リモートリポジトリの接続先をSSHに変更する
すでにHTTPS形式でクローンしているリポジトリがある場合は、接続先をSSH形式に変更する必要があります。
現在の設定を確認します。
git remote -v
以下のように https://github.com/... となっていたら、SSH形式に変更しましょう。
git remote set-url origin git@github.com:ユーザー名/リポジトリ名.git
これから新しくクローンする場合は、GitHubのリポジトリページで Code ボタンを押し、SSH タブを選んで表示されるURLを使ってください。
git clone git@github.com:ユーザー名/リポジトリ名.git
9. うまくいかないときのチェックリスト
| 症状 | 確認すること |
|---|---|
Permission denied (publickey) と出る |
公開鍵がGitHubに正しく登録されているか、ssh-add で鍵を追加できているか確認 |
| 毎回パスフレーズを聞かれる |
ssh-agent が起動しているか確認(手順4を再実行) |
git remote -v が https:// のまま |
手順8でSSH形式に変更し忘れていないか確認 |
| 複数のGitHubアカウントを使い分けたい |
~/.ssh/config でホストごとに鍵を指定する設定が必要(応用編) |
まとめ
- SSH鍵は「公開鍵(GitHubに登録)」と「秘密鍵(自分のPCに保管)」のペアでできている
-
ssh-keygenで鍵を作成し、ssh-agentに登録する - 公開鍵をGitHubの Settings > SSH and GPG keys に登録する
-
ssh -T git@github.comで接続確認ができる - リモートURLは
git@github.com:...の形式にする
一度設定してしまえば、以降は認証を意識せずにGit操作ができるようになります。ぜひ試してみてください。
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!