
GitHubを利用してコードをプッシュしたりクローンしたりする際、「毎回パスワードや個人アクセストークン(PAT)を入力するのが面倒」「プッシュ時に認証エラーが出て先に進めない」と悩んだ経験はないでしょうか。
GitHubではセキュリティ強化のため、2021年8月以降、Git操作におけるアカウントパスワード認証が完全に廃止されました。そのため、HTTPS接続で操作を続ける場合は有効期限付きの個人アクセストークン(PAT)を管理し続ける必要があります。
一方、一度SSH(Secure Shell)による公開鍵認証を設定してしまえば、以降はトークンの期限切れを気にすることなく、安全かつ手軽にコマンドラインからGitのプッシュやフェッチ、プルを行えるようになります。
この記事では、現代の標準暗号方式であるEd25519アルゴリズムを用いたSSH鍵ペアの作成から、GitHubへの公開鍵の登録、接続確認テスト、既存リポジトリのURL切り替えまでを、初心者の方でも迷わず進められるようステップ順に解説します。
- この記事で行うこと
- 前提条件・対象読者
- 【結論】GitHub用SSH鍵の作成から接続確認までの最短3ステップ
- ステップ1:SSH鍵ペア(ed25519)を生成する(ssh-keygenコマンド)
- ステップ2:公開鍵をクリップボードにコピーしてGitHubに登録する(Windows/Mac/Linux対応)
- ステップ3:GitHubへのSSH接続テストを行う(ssh -T git@github.com)
- 既存のHTTPSリポジトリをSSH接続URLに切り替えるコマンド(git remote set-url)
- 接続できない・Permission deniedが出た時の確認ポイント(鍵パーミッション、ssh-agent)
- まとめ
- 次に読むおすすめ記事
- 参考情報
この記事で行うこと
前提条件・対象読者
この記事は以下のような環境・読者を想定しています。
| 項目 | 内容・要件 |
|---|---|
| 対象OS | Windows 10 / 11(PowerShellまたはGit Bash)、macOS、Linux / WSL |
| 必須ツール | Git(インストール済み)、OpenSSH(各OS標準搭載) |
| 必要アカウント | GitHubアカウント |
| 対象読者 | GitHubを使い始めたばかりの初学者、HTTPS接続からSSH接続へ移行したい方 |
事前にお使いのPCでターミナル(PowerShell、Terminal、またはGit Bash)を開き、git --version および ssh -V を実行して、GitとOpenSSHが利用可能であることを確認してください。
【結論】GitHub用SSH鍵の作成から接続確認までの最短3ステップ
全体の流れを把握しておくと、作業で迷うことがなくなります。GitHubのSSH接続設定は、以下の3つのステップで完了します。
- ターミナルでSSH鍵ペア(秘密鍵と公開鍵)を生成する
- 公開鍵の内容をコピーし、GitHubの設定画面に登録する
- 接続テストコマンドを実行し、正常に認証されることを確認する
所要時間は約5分程度です。それでは具体的な手順に入りましょう。
ステップ1:SSH鍵ペア(ed25519)を生成する(ssh-keygenコマンド)
まず、PCのローカル環境にSSH鍵ペアを作成します。
SSH鍵には「公開鍵(誰に見せても安全な鍵)」と「秘密鍵(絶対に他人に渡してはいけない自分専用の鍵)」の2つがペアで生成されます。GitHub側に公開鍵を預け、手元のPCにある秘密鍵と照合することで、パスワードを入力せずに安全な本人確認が行われます。
暗号アルゴリズムはed25519を選択する
かつてはRSA暗号(4096bit)が主流でしたが、現在のGitHub公式ドキュメントでは、より安全で計算処理が高速、かつ鍵長が短く扱いやすい「Ed25519」アルゴリズムの利用が強く推奨されています。
特別な理由(古い組み込み機器での利用など)がない限り、Ed25519を選択しましょう。
鍵の生成コマンドを実行する
ターミナルを開き、以下のコマンドを実行します。メールアドレス部分には、GitHubアカウントに登録しているメールアドレスを入力してください。
ssh-keygen -t ed25519 -C "your_email@example.com"
コマンドを実行すると、以下のように対話形式で質問が表示されます。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519):
鍵の保存場所を聞かれます。特別な事情がない限り、何も入力せずにそのままEnterキーを押してください。デフォルトの保存先(Windowsなら C:\Users\ユーザー名\.ssh\id_ed25519、Mac/Linuxなら ~/.ssh/id_ed25519)に作成されます。
続いて、パスフレーズ(鍵を使うときの暗証番号)の設定を求められます。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
パスフレーズを設定すると、PCが万が一盗難・紛失した際にも第三者による不正アクセスを防ぐことができます。セキュリティを高めたい場合はパスフレーズを入力し、Enterを押します(入力中の文字は画面に表示されません)。個人利用の開発用PCで入力を省略したい場合は、何も入力せずEnterを2回押すとパスフレーズなしで鍵が生成されます。
鍵の生成が完了すると、ランダムアートとともに以下のような2つのファイルが ~/.ssh/ ディレクトリ内に作成されます。
ステップ2:公開鍵をクリップボードにコピーしてGitHubに登録する(Windows/Mac/Linux対応)
鍵ペアが作成できたら、公開鍵(拡張子が .pub のファイル)の内容をクリップボードにコピーして、GitHubに登録します。
注意点として、誤って秘密鍵(拡張子なしの id_ed25519)の中身をコピーしないよう十分注意してください。登録するのは必ず末尾に .pub が付いている公開鍵です。
公開鍵をクリップボードにコピーする
各OSのターミナルで、以下のコマンドを実行すると公開鍵の内容を直接クリップボードにコピーできます。
Windows(PowerShell)の場合:
Get-Content ~/.ssh/id_ed25519.pub | Set-Clipboard
またはコマンドプロンプトで以下を実行します。
clip < %USERPROFILE%\.ssh\id_ed25519.pub
macOSの場合:
pbcopy < ~/.ssh/id_ed25519.pub
Linux / WSLの場合:
クリップボード連携コマンド(xclipなど)が入っていない場合は、cat コマンドでターミナル上に公開鍵の中身を表示し、表示された文字列(ssh-ed25519 AAAA... から末尾のメールアドレスまで)をマウスで選択して手動コピーします。
cat ~/.ssh/id_ed25519.pub
公開鍵は ssh-ed25519 から始まる1行のテキストです。前後に不要な改行や空白が入らないようにコピーしてください。
GitHubの設定画面で公開鍵を登録する
次に、ブラウザでGitHubを開いて公開鍵を登録します。
- GitHubにログインし、画面右上のプロフィールアイコンをクリックして「Settings」を選択します。
- 左サイドバーのメニューから「Access」欄にある「SSH and GPG keys」をクリックします。
- 画面右上にある緑色の「New SSH key」ボタンをクリックします。
- 登録フォームに以下の内容を入力します。
- 入力内容を確認し、「Add SSH key」ボタンをクリックします。
- GitHubのパスワードや二要素認証(2FA)の確認画面が表示された場合は、認証を完了させます。
これでGitHub側への公開鍵の登録は完了です。
ステップ3:GitHubへのSSH接続テストを行う(ssh -T git@github.com)
公開鍵の登録が完了したら、手元のPCからGitHubに対してSSH接続が正しく通るかテストします。
接続テストコマンドの実行
ターミナルで以下のコマンドを実行します。
ssh -T git@github.com
※注意: コマンド内の git@github.com はそのまま入力してください。自分のGitHubユーザー名に変更する必要はありません。ユーザーの識別は先ほど登録した公開鍵情報によってGitHub側で自動的に行われます。
初回接続時の警告メッセージへの対処
GitHubに初めてSSH接続する場合、以下のような接続確認の警告メッセージが表示されます。
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zPTOZ736+fnkasEi6axDA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
これは「接続先(github.com)の公開鍵が手元のPCの既知ホスト一覧(known_hosts)にまだ登録されていませんが、接続を続けてもよいですか?」という安全確認のメッセージです。
ここでキーボードから yes と入力し、Enterキーを押します。
接続成功メッセージの確認
認証に成功すると、以下のようなメッセージが出力されます(ステップ1でパスフレーズを設定した場合は、先にパスフレーズの入力を求められます)。
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
ここで「but GitHub does not provide shell access(ただしGitHubはシェルアクセスを提供していません)」という文言が含まれているため、エラーになったのではないかと心配される初心者の方が多くいらっしゃいます。
しかし、GitHubはサーバーのリモート操作(シェル操作)を許可していないため、このメッセージが表示されるのは完全に正常な挙動です。前半の Hi username! You've successfully authenticated(ようこそユーザー名さん!認証に成功しました)と表示されていれば、SSH接続設定は無事完了しています。
既存のHTTPSリポジトリをSSH接続URLに切り替えるコマンド(git remote set-url)
すでにパソコン上にクローンしてある既存のGitリポジトリは、クローン時の方式(HTTPS接続)のままになっていることがあります。このままでは引き続きトークン認証を要求されてしまうため、リモートリポジトリのURLをSSH接続用のURLに変更しましょう。
1. 現在のリモートURLを確認する
変更対象のリポジトリのディレクトリへ移動し、現在のリモート設定を確認します。
git remote -v
もし以下のように https://github.com/... で始まるURLが表示されている場合は、HTTPS接続になっています。
origin https://github.com/username/repository.git (fetch)
origin https://github.com/username/repository.git (push)
2. リモートURLをSSH形式へ変更する
以下のコマンドを実行して、リモートURLをSSH接続の形式(git@github.com:...)に書き換えます。
git remote set-url origin git@github.com:username/repository.git
※ username/repository.git の部分は、ご自身のリポジトリ情報に合わせて書き換えてください。GitHubのリポジトリトップページにある緑色の「Code」ボタンをクリックし、「SSH」タブを選択すると表示されるURLをコピーして貼り付けるのが確実です。
3. 変更結果を確認する
もう一度確認コマンドを実行します。
git remote -v
URLが以下のように変化していれば設定変更は完了です。
origin git@github.com:username/repository.git (fetch)
origin git@github.com:username/repository.git (push)
以降は git push や git pull を実行してもパスワードを尋ねられることなく、SSH経由でスムーズに通信が行われます。
接続できない・Permission deniedが出た時の確認ポイント(鍵パーミッション、ssh-agent)
接続テスト(ssh -T git@github.com)やGitコマンドを実行した際に、Permission denied (publickey) などのエラーが発生して接続できない場合の主な原因と対処法をまとめました。
1. 秘密鍵・ディレクトリのパーミッションが緩すぎる(Mac / Linux / WSL)
LinuxやmacOSのOpenSSHでは、秘密鍵ファイルや .ssh ディレクトリのアクセス権限(パーミッション)が広すぎると、セキュリティ保護のために鍵の読み込みを拒否する仕様になっています。
以下のコマンドを実行して、適切なパーミッション(自分以外の読み書き権限を遮断)に修正してください。
# .ssh ディレクトリは所有者のみ読み書き実行可能(700)
chmod 700 ~/.ssh
# 秘密鍵は所有者のみ読み書き可能(600)
chmod 600 ~/.ssh/id_ed25519
# 公開鍵は他者からの読み取りを許可(644)
chmod 644 ~/.ssh/id_ed25519.pub
2. ssh-agentに秘密鍵が登録されていない
パスフレーズを設定した場合や、デフォルト名(id_ed25519)以外の名前で鍵を作成した場合、SSHエージェント(ssh-agent)に鍵が認識されていないことがあります。
SSHエージェントを起動し、秘密鍵を手動で追加してください。
Mac / Linux / WSLの場合:
# バックグラウンドでssh-agentを起動
eval "$(ssh-agent -s)"
# 秘密鍵をssh-agentに追加
ssh-add ~/.ssh/id_ed25519
Windows(PowerShell管理者権限)の場合:
WindowsのOpenSSH Authentication Agentサービスが無効になっている場合があります。PowerShellを管理者として開き、サービスを開始してから鍵を追加します。
# ssh-agentサービスの起動タイプを自動に変更して開始
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
# 秘密鍵の追加
ssh-add $HOME\.ssh\id_ed25519
3. 公開鍵と秘密鍵を取り違えていないか
よくあるミスとして、GitHubの「Key」欄に秘密鍵(id_ed25519)の内容を貼り付けてしまったり、コピー時に先頭の ssh-ed25519 や末尾の文字列が欠けているケースがあります。
GitHubに登録されている鍵のプレビューを確認し、先頭が ssh-ed25519 で始まっているか、鍵のフィンガープリントがローカルのものと一致しているか確認してください。ローカルの公開鍵のフィンガープリントは以下のコマンドで確認できます。
ssh-keygen -lf ~/.ssh/id_ed25519.pub
4. 複数アカウントを使い分ける場合のconfig設定
仕事用と個人用など、複数のGitHubアカウントや異なるSSH鍵を同一PCで使い分ける場合は、~/.ssh/config ファイルを作成してホストごとに使用する秘密鍵を指定します。
~/.ssh/config の記述例:
# デフォルト(個人用アカウント)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
# 仕事用アカウント
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
このように設定しておくと、仕事用リポジトリのリモートURLを git@github-work:org/repo.git とするだけで、自動的に仕事用の鍵を使って認証が行われるようになります。
まとめ
GitHubへのSSH接続設定は、以下の要点を押さえることで安全かつスムーズに完了できます。
一度SSH接続を設定しておけば、アクセストークンの定期的な再発行やパスワード入力の手間から解放され、日々の開発作業に集中できるようになります。まだHTTPS接続を利用している方は、ぜひこの機会にSSH接続へ移行してみてください。
次に読むおすすめ記事
Gitの全体像や基本コマンド、ブランチ運用、トラブル解決手順を体系的に学びたい方は、以下の完全ガイドもあわせて参考にしてください。


