GitHub - SSHの設定

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

概要

SSH (Secure Shell) は、暗号化された通信を用いてリモートサーバーに安全に接続するためのプロトコルである。

GitHubとの通信方法にはHTTPSとSSHの2種類があり、HTTPSではリポジトリへのプッシュ / プルのたびにユーザ名とPersonal Access Tokenの入力が必要となる。
一方、SSHでは公開鍵認証方式を使用するため、一度鍵を設定すれば以降の認証は自動的に行われる。

Claude CodeやOpenCode等のAIコーディングツールからGitHubリポジトリを操作する場合にも、SSH接続の設定が必要となる。

SSHを使用する主なメリットは以下の通りである。

  • パスワードやトークンの入力が不要
    毎回の認証操作が省略されるため、作業効率が向上する。
  • 高い安全性
    公開鍵認証方式はパスワード認証よりも安全であり、通信内容も暗号化される。
  • 利便性
    一度設定すれば、以降のgit push / pull / clone等の操作で追加の認証入力は不要である。
  • AIコーディングツールとの親和性
    Claude CodeやOpenCode等のターミナルベースのAIツールは対話的なパスワード入力に対応していない場合があるため、SSH接続が事実上必須となる。


SSH接続の仕組みは以下の通りである。

  1. ローカルコンピュータでSSH鍵ペア (秘密鍵と公開鍵) を生成する。
  2. 公開鍵をGitHubアカウントに登録する。
  3. ローカルからGitHubに接続する際、秘密鍵で署名を生成してGitHubが公開鍵で検証する。
  4. 検証に成功すると認証が完了して、リポジトリへのアクセスが許可される。



SSHの設定

SSH鍵の種類

SSH鍵にはいくつかの暗号アルゴリズムが存在する。

下表に、主なSSH鍵の種類と特徴を示す。

SSH鍵の種類
アルゴリズム 鍵長 特徴
Ed25519 256ビット固定 現在最も推奨されるアルゴリズム。
高速かつ安全性が高い。GitHubも推奨している。
RSA 2048 / 4096ビット 広く普及しており互換性が高い。
4096ビット以上の使用を推奨する。
ECDSA 256 / 384 / 521ビット 楕円曲線暗号を使用する。
Ed25519が利用できない環境での代替として使用される。
DSA 1024ビット 非推奨。OpenSSH 7.0以降ではデフォルトで無効化されている。


特別な理由がない限り、Ed25519の使用を推奨する。

SSH鍵の生成

以下のコマンドを実行して、Ed25519アルゴリズムのSSH鍵ペア (秘密鍵と公開鍵) を生成する。

# Ed25519鍵を生成する (推奨)
ssh-keygen -t ed25519 -C "GitHubに登録しているメールアドレス" -f ~/.ssh/id_ed25519_github

# Ed25519が使用できない環境の場合はRSA 4096ビットを使用する
ssh-keygen -t rsa -b 4096 -C "GitHubに登録しているメールアドレス" -f ~/.ssh/id_rsa_github


コマンド実行時のオプションの詳細は以下の通りである。

  • -t ed25519
    鍵の種類を指定する。
  • -C "メールアドレス"
    コメントを設定する。一般的にメールアドレスを指定する。
  • -f ~/.ssh/id_ed25519_github
    鍵ファイルの保存先とファイル名を指定する。


コマンド実行後にパスフレーズの入力を求められる。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:


パスフレーズを設定すると、鍵の使用時にパスフレーズの入力が必要になる。
セキュリティの観点からパスフレーズの設定を推奨するが、空欄のまま[Enter]キーを押下して省略することも可能である。

鍵の生成が完了すると、以下に示す2つのファイルが作成される。

  • ~/.ssh/id_ed25519_github
    秘密鍵。絶対に他者と共有してはならない。
  • ~/.ssh/id_ed25519_github.pub
    公開鍵。GitHubに登録するファイル。


SSH Agentの設定

SSH Agentは秘密鍵をメモリ上に保持して、SSH接続時に自動的に鍵を提供するデーモンである。
パスフレーズを設定した場合、SSH Agentを使用することで毎回のパスフレーズ入力を省略できる。

# SSH Agentをバックグラウンドで起動する
eval "$(ssh-agent -s)"

# 秘密鍵をSSH Agentに追加する
ssh-add ~/.ssh/id_ed25519_github


パスフレーズを設定している場合は、ssh-addコマンドの実行時に1度だけパスフレーズの入力を求められる。

SSH Agentの起動をシェルのログイン時に自動化する場合は、シェルの設定ファイルに以下を追記する。

 # Bashの場合
 
 # SSH Agent
 if [ -z "$SSH_AUTH_SOCK" ]
 then
    eval "$(ssh-agent -s)" > /dev/null 2>&1
    ssh-add ~/.ssh/id_ed25519_github > /dev/null 2>&1
 fi


 # Fishの場合
 
 # SSH Agent
 if not set -q SSH_AUTH_SOCK
     eval (ssh-agent -c) > /dev/null 2>&1
     ssh-add ~/.ssh/id_ed25519_github > /dev/null 2>&1
 end


SSH configの設定

~/.ssh/config ファイルにGitHub用の設定を追記する。
この設定により、GitHub接続時に使用する鍵ファイルが自動的に選択される。

Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/id_ed25519_github
     AddKeysToAgent yes


各設定項目の詳細は以下の通りである。

SSH config設定項目
項目 説明
Host 接続先のエイリアス名
github.com を指定する。
HostName 実際の接続先ホスト名
github.com を指定する。
User 接続ユーザ名
GitHubでは常に git を指定する。
IdentityFile 使用する秘密鍵のパス
AddKeysToAgent yes を指定すると、初回接続時に自動的にSSH Agentに鍵が追加される。


複数のGitHubアカウントを使い分ける場合は、以下に示すようにHostを別名にして設定する。

# メインアカウント
Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/id_ed25519_github_main

# サブアカウント
Host github-sub
     HostName github.com
     User git
     IdentityFile ~/.ssh/id_ed25519_github_sub


サブアカウントのリポジトリをクローンする場合は、以下に示すように指定する。

git clone git@github-sub:<ユーザ名>/<リポジトリ名>.git


公開鍵のGitHubへの登録

生成した公開鍵をGitHubアカウントに登録する。

まず、公開鍵の内容をクリップボードにコピーする。

# 公開鍵の内容を表示する
cat ~/.ssh/id_ed25519_github.pub


# 表示例
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@example.com


表示された文字列を全てコピーして、以下の手順でGitHubに登録する。

  1. GitHubにログインする。
  2. 右上のプロフィールアイコンを選択して、[Settings]を選択する。
  3. 左メニューの[Access]セクションにある[SSH and GPG keys]を選択する。
  4. [New SSH key]ボタンを押下する。
  5. 以下の項目を入力する。
    • Title
      鍵の識別名を入力する。
      例: SUSE-PC
    • Key type
      Authentication Key を選択する。(デフォルト)
    • Key
      コピーした公開鍵を貼り付ける。
  6. [Add SSH key]ボタンを押下する。
  7. GitHubのパスワード入力を求められた場合は、入力して認証する。


GitHub CLIを使用して登録する場合は、以下に示すコマンドを実行する。

gh ssh-key add ~/.ssh/id_ed25519_github.pub --title "SUSE-PC"


接続テスト

SSH鍵の登録が完了した後、GitHubとのSSH接続が正常に動作するかテストする。

ssh -T git@github.com


初回接続時は、以下のようにホスト鍵の確認を求められるためyesと入力する。

The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes


接続に成功すると、以下のメッセージが表示される。

Hi <ユーザ名>! You've successfully authenticated, but GitHub does not provide shell access.


上記のメッセージが表示されれば、SSHの設定は完了である。

接続に失敗した場合は、以下のコマンドを実行して詳細なデバッグ情報を確認する。

ssh -vT git@github.com


既存リポジトリのリモートURLをSSHに変更

既にHTTPSでクローンしたリポジトリをSSH接続に切り替える場合は、リモートURLを変更する。

# 現在のリモートURLを確認する
git remote -v

# リモートURLをSSHに変更する
git remote set-url origin git@github.com:<ユーザ名>/<リポジトリ名>.git

# 変更後のリモートURLを確認する
git remote -v


SSH鍵のセキュリティに関する注意事項

SSH鍵を安全に運用するために、以下に示す事柄に留意する必要がある。

SSH鍵のセキュリティ対策
項目 説明
秘密鍵の権限設定 秘密鍵ファイルのパーミッションは600 (所有者のみ読み書き可) に設定する。
chmod 600 ~/.ssh/id_ed25519_github
秘密鍵の共有禁止 秘密鍵は絶対に他者と共有してはならない。共有するのは公開鍵 (.pub) のみである。
パスフレーズの設定 秘密鍵にはパスフレーズを設定することを推奨する。
万が一秘密鍵ファイルが漏洩した場合のリスクを軽減する。
鍵のローテーション 定期的に新しい鍵ペアを生成して、古い鍵をGitHubから削除することを推奨する。
不要な鍵の削除 使用しなくなったデバイスの鍵は、GitHubの[SSH and GPG keys]設定ページから速やかに削除する。


トラブルシューティング

下表に、SSH接続に関する一般的な問題と対処法を示す。

SSHトラブルシューティング
症状 原因 対処法
Permission denied (publickey) 公開鍵がGitHubに登録されていない、
または秘密鍵のパスが正しくない
ssh-add -lで登録済みの鍵を確認する。
SSH configのIdentityFileパスを確認する。
GitHubに公開鍵が正しく登録されているか確認する。
Could not open a connection to your authentication agent SSH Agentが起動していない eval "$(ssh-agent -s)"を実行してSSH Agentを起動する。
WARNING: UNPROTECTED PRIVATE KEY FILE! 秘密鍵ファイルのパーミッションが緩すぎる chmod 600 ~/.ssh/id_ed25519_githubを実行する。
Connection timed out ファイアウォール等でSSHポート (22) がブロックされている HTTPS経由のSSH接続 (ポート443) を試行する。
SSH configに以下を設定する。
Host github.com
  HostName ssh.github.com
  Port 443