GitHubは2021年にHTTPS接続でのパスワード認証を廃止し、個人アクセストークン(PAT)による認証に切り替わりました。コマンドラインでpushするたびにトークンを入力する作業は、慣れない時期には特にストレスになります。
SSH鍵認証を一度設定しておけば、それ以降はgit push・git pullがパスワード入力なしで動くようになります。
この記事では、Ubuntu 24.04 LTS(WSL2またはVPS)を想定環境として、ssh-keygenによる鍵ペアの生成からGitHubへの公開鍵登録・ssh -Tでの接続確認・リモートURLの切り替えまでを手順で解説します。
この記事のポイント
・ssh-keygen -t ed25519で鍵ペアを生成する
・公開鍵(~/.ssh/id_ed25519.pub)をGitHubに登録する
・ssh -T git@github.comで接続成功を確認する
・リモートURLをgit@github.com:形式に切り替えれば完了
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
GitHubへの接続方式:HTTPSとSSHの違い
GitHubにアクセスする方法には「HTTPS」と「SSH」の2種類があります。どちらを使っても同じリポジトリを操作できますが、認証の仕組みが大きく異なります。| 方式 | 認証方法 | 特徴 |
|---|---|---|
| HTTPS | ユーザー名+個人アクセストークン(PAT) | 設定が簡単だが毎回トークンが必要(git credentialで保存可) |
| SSH | SSH鍵ペア(公開鍵+秘密鍵) | 一度設定すればパスワードなしで接続できる |
「まだGitHub自体に不慣れ」という段階であれば、まずHTTPS方式でリポジトリの基本操作に慣れてからSSH設定に進むのも一つの方法です。
SSH公開鍵認証の仕組みを理解する
SSH鍵認証には「公開鍵」と「秘密鍵」の2種類のファイルが登場します。この2つはペアになっており、一方だけでは機能しません。・公開鍵(id_ed25519.pub):GitHubに登録するファイルです。他者に見られても問題ありません。
・秘密鍵(id_ed25519):自分のPCやサーバーだけに保存するファイルです。外部に漏れると第三者がGitHubにアクセスできてしまうため、厳重に管理します。
git pushを実行すると、Linuxは「自分が持つ秘密鍵」と「GitHubに登録済みの公開鍵」が対になっているかを照合します。照合が通ればパスワードなしで接続が許可されます。玄関の錠前と鍵の関係に近いイメージです。公開鍵が「錠前」、秘密鍵が「鍵(キー)」にあたり、手元の鍵がなければドアは開きません。
秘密鍵はファイルとして
~/.ssh/に保存されます。このファイルが漏れると第三者にGitHubへのアクセス権を奪われる可能性があるため、ファイルのパーミッション設定が重要になります(後述します)。GitHubにSSH接続する手順
1. 鍵ペアを生成する(ssh-keygen)
ターミナル(WSL2またはVPS上のbash)で次のコマンドを実行します。your_email@example.comの部分は自分のGitHubアカウントに登録しているメールアドレスに変えてください。# Ed25519形式のSSH鍵ペアを生成する(現在推奨されている形式) ssh-keygen -t ed25519 -C "your_email@example.com"
# 出力例(環境により異なります) Generating public/private ed25519 key pair. Enter file in which to save the key (/home/username/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/username/.ssh/id_ed25519 Your public key has been saved in /home/username/.ssh/id_ed25519.pub The key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com
・パスフレーズは設定しなくてもSSH接続は動きます。ただしパスフレーズを設定しておくと、万一秘密鍵ファイルが漏れたときの被害を抑えられます。
生成後、ファイルが作成されているか確認します。
# ~/.ssh ディレクトリの内容を確認する ls ~/.ssh/
# 出力例(環境により異なります) id_ed25519 id_ed25519.pub known_hosts
id_ed25519(秘密鍵)とid_ed25519.pub(公開鍵)の2ファイルが確認できれば完了です。2. 公開鍵の内容をコピーする
次のコマンドで公開鍵ファイルの内容を表示します。# 公開鍵ファイルの中身を表示する cat ~/.ssh/id_ed25519.pub
# 出力例(環境により異なります) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAbcDefGhiJklMnopQrstUvwXyz0123456789abcdEFGH your_email@example.com
ssh-ed25519で始まる1行全体が公開鍵です。末尾のメールアドレスまで含め、すべてコピーしてください。3. GitHubに公開鍵を登録する
GitHubのWebサイトにブラウザでアクセスし、次の手順で公開鍵を登録します。1. GitHubにログインし、右上のプロフィールアイコンをクリックして「Settings」を選ぶ
2. 左メニューの「SSH and GPG keys」をクリックする
3. 「New SSH key」ボタンをクリックする
4. 「Title」欄に識別しやすい名前を入力する(例:「WSL2 Ubuntu」「VPS Tokyo」)
5. 「Key type」は「Authentication Key」のまま変更不要
6. 「Key」欄に先ほどコピーした公開鍵の内容を貼り付ける
7. 「Add SSH key」ボタンをクリックして登録完了
GitHubのSSH鍵一覧に登録した鍵のタイトルが表示されれば成功です。
4. SSH接続をテストする(ssh -T)
設定が正しく完了しているかを確認するためのコマンドです。# GitHubへのSSH接続をテストする ssh -T git@github.com
# 出力例(環境により異なります) The authenticity of host 'github.com (140.82.121.4)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'github.com' (ED25519) to the list of known hosts. Hi yourusername! You've successfully authenticated, but GitHub does not provide shell access.
「Permission denied (publickey).」と表示された場合は、後述のトラブルシュートを参照してください。
5. リモートURLをSSHに切り替える
すでにHTTPSでcloneしたリポジトリがある場合は、リモートURLを変更します。まず現在のURLを確認します。# リモートURLを確認する git remote -v
# 出力例(環境により異なります) origin https://github.com/yourusername/yourrepo.git (fetch) origin https://github.com/yourusername/yourrepo.git (push)
https://で始まっていればHTTPS接続です。次のコマンドでSSH形式のURLに切り替えます。# リモートURLをSSH形式に変更する(yourusernameとyourrepoは実際の値に置き換える) git remote set-url origin git@github.com:yourusername/yourrepo.git # 変更後に確認する git remote -v
# 出力例(環境により異なります) origin git@github.com:yourusername/yourrepo.git (fetch) origin git@github.com:yourusername/yourrepo.git (push)
git@github.com:で始まっていればSSH接続に切り替わっています。これ以降、git push・git pullはSSH経由で実行されます。なお、新しくリポジトリをcloneする場合はGitHubのリポジトリページで「Code」ボタンをクリックし、「SSH」タブに切り替えてからURLをコピーしてください。
WSL2環境での注意点
WSL2を使っている場合、追加で確認しておくべき点が2つあります。ssh-agentが起動していない問題
パスフレーズを設定した場合、ターミナルを開くたびにパスフレーズを求められることがあります。
ssh-agentを使うと、1回入力すればセッション中は再入力が不要になります。# ssh-agentを起動してセッションに登録する eval "$(ssh-agent -s)" # 秘密鍵をssh-agentに追加する ssh-add ~/.ssh/id_ed25519
# 出力例(環境により異なります) Agent pid 12345 Identity added: /home/username/.ssh/id_ed25519 (your_email@example.com)
SSHは
~/.sshディレクトリと秘密鍵ファイルのパーミッションが正しくないと接続を拒否します。サーバーへのSSH公開鍵認証の仕組みはssh-keygenコマンドでSSH公開鍵認証を設定する方法でも詳しく解説していますが、基本的には次の設定にしておけば問題ありません。# ~/.ssh ディレクトリのパーミッションを設定する(所有者のみ読み書き実行可) chmod 700 ~/.ssh # 秘密鍵ファイルのパーミッションを設定する(所有者のみ読み書き可) chmod 600 ~/.ssh/id_ed25519
/mnt/c/以下)上に鍵ファイルを置くと、パーミッション変更が効かない場合があります。鍵ファイルは必ずWSL2内のLinuxファイルシステム(~/以下)に置くようにしてください。よくあるエラーと対処法
「Permission denied (publickey)」が出た場合
GitHubへのSSH接続に失敗する最も一般的なエラーです。以下を順番に確認してください。・公開鍵がGitHubに正しく登録されているか:GitHubの「Settings → SSH and GPG keys」で登録済みの鍵一覧を確認する
・鍵ファイルが正しいパスにあるか:
ls ~/.ssh/でid_ed25519とid_ed25519.pubが存在することを確認する・ssh-agentに秘密鍵が読み込まれているか:
ssh-add -lで登録済み鍵の一覧を確認する・パーミッションが正しいか:
ls -la ~/.ssh/でid_ed25519が「-rw-------(600)」になっているか確認する# 詳細なデバッグ情報を表示してSSH接続をテストする ssh -vT git@github.com
-vオプション(verbose)を付けると、接続の各ステップが詳細に表示され、どこで失敗しているかが把握しやすくなります。「Host key verification failed」が出た場合
~/.ssh/known_hostsに記録されているGitHubのホスト鍵と、実際のホスト鍵が一致しない場合に発生します。GitHubが定期的にホスト鍵を更新した直後などに起きることがあります。# known_hostsからgithub.comのエントリを削除して再接続する ssh-keygen -R github.com ssh -T git@github.com
本記事のまとめ
この記事では、LinuxからGitHubにSSH接続する設定手順を解説しました。| 手順 | コマンド・操作 |
|---|---|
| 鍵ペアを生成する | ssh-keygen -t ed25519 -C "メールアドレス" |
| 公開鍵の内容を表示する | cat ~/.ssh/id_ed25519.pub |
| GitHubに公開鍵を登録する | Settings → SSH and GPG keys → New SSH key |
| 接続をテストする | ssh -T git@github.com |
| リモートURLをSSHに変更する | git remote set-url origin git@github.com:ユーザー名/リポジトリ.git |
| パーミッションを確認する | chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519 |
まず
ssh-keygenで鍵ペアを生成し、公開鍵をGitHubに登録してssh -T git@github.comで動作確認する、この3ステップだけ覚えておけば十分です。Gitのブランチやマージの使い方をさらに詳しく知りたい方は、LinuxのGitブランチとマージ入門も参考にしてください。
次に読む記事(Linux入門シリーズ)
・LinuxでGitを使う入門|バージョン管理の基本と基本コマンドを初心者向けに解説
・LinuxのGitブランチとマージ入門|git branch・checkout・mergeでWSL2・VPSのコードを管理する方法
・WSL2でVS Codeを使う入門|Remote WSL拡張でLinuxファイルをWindowsから編集する方法
・ssh-keygenコマンドでSSH公開鍵認証を設定する方法(サーバー向け)
・Linuxのコマンドライン入門|ターミナルの開き方から基本操作まで初心者向けに解説
実務で使うLinuxスキル 7テーマ
・tmuxコマンドでターミナルを分割・管理する方法(シェルスクリプト)
・ssh-keygenコマンドでSSH公開鍵認証を設定する方法(セキュリティ)
・Apacheのタイムアウト設定を変更・確認する方法(サーバー構築)
・straceコマンドでプロセスのシステムコールを追跡する方法(トラブルシューティング)
・ncコマンドでネットワーク接続をテストする方法(ネットワーク)
・rsyncコマンドでファイルを同期・転送する方法(ファイルシステム・ストレージ)
・Linuxでポート番号の状態を確認するコマンド(現場コラム)
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:Google Gemini CLIをLinuxで使う入門|WSL2・VPSのターミナルからAIにLinuxコマンドを聞く方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます