LinuxでGitHubにSSH接続する入門|WSL2・VPSからgit pushとgit pullをパスワードなしで行う手順

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > 【Linux入門】初心者のための基礎知識・講座 > LinuxでGitHubにSSH接続する入門|WSL2・VPSからgit pushとgit pullをパスワードなしで行う手順
「GitHubにpushしようとしたら認証エラーが出た」「毎回トークンを入力するのが面倒」と感じている方は多いはずです。
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:形式に切り替えれば完了


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

GitHubへの接続方式:HTTPSとSSHの違い

GitHubにアクセスする方法には「HTTPS」と「SSH」の2種類があります。どちらを使っても同じリポジトリを操作できますが、認証の仕組みが大きく異なります。
方式 認証方法 特徴
HTTPS ユーザー名+個人アクセストークン(PAT) 設定が簡単だが毎回トークンが必要(git credentialで保存可)
SSH SSH鍵ペア(公開鍵+秘密鍵) 一度設定すればパスワードなしで接続できる
SSH接続の最大のメリットは「一度鍵を登録したPCまたはサーバーから、以降はパスワードなしで接続できる」点です。VPSで自動デプロイスクリプトを動かす場面や、WSL2で日々コードを管理する場面で特に効果を感じやすいです。

「まだ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

・保存先(「Enter file in which to save the key」)はEnterキーを押してデフォルトのまま進めて問題ありません。
・パスフレーズは設定しなくても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.

「Hi (ユーザー名)! You've successfully authenticated」と表示されれば、SSH接続の設定は完了です。
「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公開鍵認証の仕組みはssh-keygenコマンドでSSH公開鍵認証を設定する方法でも詳しく解説していますが、基本的には次の設定にしておけば問題ありません。

# ~/.ssh ディレクトリのパーミッションを設定する(所有者のみ読み書き実行可) chmod 700 ~/.ssh # 秘密鍵ファイルのパーミッションを設定する(所有者のみ読み書き可) chmod 600 ~/.ssh/id_ed25519

WSL2でWindowsのファイルシステム(/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

再接続時に「Are you sure you want to continue connecting?」と表示されたら「yes」と入力してください。

本記事のまとめ

この記事では、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
一度設定してしまえば、WSL2でもVPS上でも同じ手順でGitHubに接続できます。
まず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サーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。