GitHubで発生するSSHエラーの対処法をわかりやすく解説
はじめに
Gitを使ったコード管理で、GitHub へSSH接続を設定する場面はよくあるかもしれません。
しかし、初心者の方は「公開鍵や秘密鍵って何?」「Permission denied (publickey) と表示されて先に進めない」といった悩みに直面しがちです。
そこで本記事では、SSH接続の基礎と実際の操作手順、さらにエラーの原因と対処法を一通り整理しました。
技術用語をできるだけかみ砕きながら、皆さんがスムーズにエラーを解消できるように解説していきます。
初心者の方でも迷わず読めるよう、実際の利用シーンと関連づけながら説明していきます。
この記事を読むとわかること
- GitHubにおけるSSH接続の役割とメリット
- 公開鍵・秘密鍵の基本的な仕組みと生成手順
- 代表的なSSHエラーの原因と対処法
- 実務で活用する際のトラブルシューティングのポイント
- エラーを減らすための日々の運用と対策
GitHubでSSH接続を設定するときに押さえるポイント
GitHubにソースコードをプッシュするとき、パスワードの代わりにSSH鍵を使って認証する方法があります。
これによって通信の安全性が高まり、パスワードを入力する手間も減らすことができます。
ただし、SSHの設定手順を誤ると認証エラーが発生しやすいため、ここであらためて鍵認証の特徴をおさえましょう。
パスワード認証との違い
パスワード認証は、リポジトリに変更をプッシュするときなどに都度パスワードを入力する必要があります。
一方、SSH鍵方式は、GitHub側に「公開鍵」を登録し、手元のPCには「秘密鍵」を保管しておきます。
パスワードを入力しなくても、秘密鍵が正しければGitHub側で認証できる仕組みです。
これはシンプルなメリットでありながら、もし鍵の保管に問題があるとエラーにつながることがあります。
鍵認証によるメリット
認証の自動化
Git操作のたびにパスワードを打たなくても良いので、作業効率が向上します。
セキュリティの向上
公開鍵・秘密鍵の仕組みを使うため、パスワードをネットワークでやりとりしません。
盗み見られるリスクが低く、安全にリポジトリへアクセスできます。
アカウント情報の漏洩リスク減少
万が一、公開鍵が他者に知られても、秘密鍵がない限り接続はできません。
パスワードが流出するより被害が少ないのも特長です。
こうした利点がある一方で、SSH設定をまちがえると「エラーが出て接続できない」というケースも発生します。
そのため、公開鍵を正しくGitHubに登録する、秘密鍵のパーミッションを適切に設定するといった基本が大切です。
秘密鍵と公開鍵の仕組み
SSH認証は、非対称鍵暗号という方式で成り立っています。
ここでは専門的な言葉をできるだけ抑え、イメージとして鍵穴と鍵の関係をイメージするとわかりやすいかもしれません。
イメージ:鍵穴(公開鍵)と鍵(秘密鍵)
実際の鍵穴は誰でも見られますが、それだけではドアを開けられません。
そこに合う鍵を持っている人だけがドアを開けられます。
同様に、GitHub上に登録した公開鍵は基本的に誰でも見ることができますが、それに対応した秘密鍵(手元に保管しておく鍵)を持っていなければログインできません。
認証プロセス
- GitHubに「公開鍵」を登録する
- 自分のPCに「秘密鍵」を保管する
- 接続の際にGitHub側が「本当に対応する秘密鍵を持っているか」チェックする
- 秘密鍵が正しければ、GitHub側がOKを返す
これがSSHで認証しているイメージです。
エラーの多くは、「秘密鍵と公開鍵がセットになっていない」「ファイルの場所やパーミッションが違う」といった、上記プロセスが崩れている場合に起きます。
キーを作成する手順
ここでは、LinuxやmacOSのターミナル、あるいはWindowsのSSHクライアント(Git Bash など)での鍵生成を例に説明します。
作業の流れはほぼ共通で、コマンドが多少違うだけで考え方は同じです。
SSH鍵の生成コマンド例
# SSH鍵(ed25519)の作成例 ssh-keygen -t ed25519 -C "メールアドレス"
コマンドを実行すると、鍵を保存するファイル名が求められます。
何も入力せずにEnterを押すと、~/.ssh/id_ed25519
に秘密鍵、~/.ssh/id_ed25519.pub
に公開鍵が生成されます。
パスフレーズを設定する画面が出たら、必要に応じてパスフレーズを入れましょう。
パスフレーズは秘密鍵が流出した場合に備えるもので、もし不安ならば設定する方が安全です。
生成された鍵ファイルを確認
コマンドが成功すると、~/.ssh/
ディレクトリ内に鍵ファイルができます。
- 秘密鍵 :
id_ed25519
(触られたくないファイル) - 公開鍵 :
id_ed25519.pub
(GitHubに登録するファイル)
秘密鍵が第三者に渡ると安全性を失うので、外部に公開しないよう気をつけましょう。
このあと、公開鍵をGitHubの設定画面に登録するだけです。
GitHubへの公開鍵登録方法
SSH鍵を作成したら、GitHubへ公開鍵を登録します。
ここではGitHub上でどのように鍵を追加するかを簡単に見ていきます。
GitHubの設定画面
- GitHubにログインして、右上のプロフィールアイコンをクリック
- 「Settings(設定)」を選択
- 左側のメニューにある「SSH and GPG keys」をクリック
- 「New SSH key」をクリック
これで新しい鍵を登録する画面が出ます。
「Title」は任意のわかりやすい名前を付けると管理しやすいです。
公開鍵を貼り付ける
ターミナル上で、公開鍵を表示します。
cat ~/.ssh/id_ed25519.pub
表示された文字列をコピーして、GitHubの「Key」欄にペーストします。
最後に「Add SSH key」をクリックで完了です。
これでGitHubへのSSH接続が利用できる準備が整いました。
よくあるSSHエラーと対処法
ここからは、具体的なエラーと解決策をいくつか紹介していきます。
SSH周りのトラブルは多くの場合、設定ファイルやパーミッションの問題で起こります。
公開鍵が登録されていない
初歩的なケースですが、GitHubに公開鍵を登録しないまま git push
や git clone
をしようとするとエラーが出ることがあります。
その場合は、上記の手順で生成した公開鍵をしっかりGitHubに登録しましょう。
もし複数のPCを使っているなら、各PCごとに鍵を登録する必要があります。
Permission denied (publickey)
これはSSH認証で最もよく見かけるエラーです。
原因として考えられるのは、以下のようなケースが多いです。
- 秘密鍵と公開鍵のペアが間違っている(古い鍵を使っているなど)
- GitHub設定画面に、現在使っている公開鍵が登録されていない
- 鍵ファイルのパーミッション設定が誤っている
- SSHクライアントが指定している鍵ファイルが違う
対処法としては、「現在の鍵ペアが正しいか」「公開鍵はGitHubに追加済みか」「鍵ファイルのパスが正しいか」を一度確認してください。
パーミッションが問題になりやすいので、特に~/.ssh/id_ed25519
が読み書きできるのは自分だけの状態(例: 600 など)になっているかをチェックしましょう。
Host key verification failed
これは「接続先ホストのキーが既存の記録と違う」と見なされて、接続がブロックされた状態です。
SSHはセキュリティのため、接続先サーバーの「ホスト鍵情報」を ~/.ssh/known_hosts
に記録します。
もしGitHub側のホスト鍵が更新されたり、ローカルでknown_hostsファイルの記録が壊れていたりすると、整合性が取れずにエラーが出ます。
対応策としては、known_hosts
ファイルのGitHubに関する部分を削除してから再度接続すれば、改めてホストキーを受け取れます。
ただし、本当にホスト鍵が変更されていた場合はフィッシングやなりすましの可能性もゼロではないため、状況によって注意が必要です。
Could not resolve hostname github.com
ドメイン名をDNSで解決できない場合に出るエラーです。
ネットワークやDNSに問題があったり、ホスト名のスペルミスがあったりすると起こります。
オフライン環境や企業のVPNで特殊なネットワーク設定がある場合も注意が必要です。
まずは単純にネット接続があるか、ping github.com
で応答があるかを確認しましょう。
SSH接続が失敗するときのチェックリスト
SSHエラーは発生原因が多岐にわたります。
ここでは、特に初心者が見落としがちなポイントをチェックリスト形式でまとめます。
何かおかしいと思ったら順番に確認してみると、問題解決の糸口が見えるかもしれません。
1. 秘密鍵のパーミッションは適切か
秘密鍵のファイルパーミッションが厳しく管理されていないと、SSHクライアントから弾かれる可能性があります。
chmod 600 ~/.ssh/id_ed25519
のように、所有者だけが読み書きできる権限にしておくことが基本です。
2. 公開鍵がGitHubに登録されているか
実際にGitHubのSSH設定画面を開いて、鍵が一覧に存在しているかを確認してください。
名前を付け忘れたり、複数の鍵があるときに別の公開鍵を登録してしまうこともありがちです。
3. 鍵の種類が合っているか
RSA、ECDSA、ed25519など鍵の種類はいくつかありますが、GitHubがサポートしている方式である必要があります。
現在はed25519やRSAが広く利用されており、これらを選んでおけばほぼ問題ありません。
4. 接続URLがSSHになっているか
リポジトリのクローンURLが "https://github.com/..." になっていると、SSHではなくHTTPSでの接続を試みることになります。
SSHを使いたい場合は "git@github.com:..." という形式を使っているか確認しましょう。
5. known_hostsの情報が破損していないか
~/.ssh/known_hosts
に保存されている情報が何らかの形で壊れていると、ホストキーの不整合で接続が中断される場合があります。
必要に応じて、そのファイルのGitHub関連行を削除して再登録してみましょう。
秘密鍵を共有ストレージやメールでやり取りするのは安全上危険です。
万が一共有してしまった場合は、鍵を再作成したうえで新しい公開鍵をGitHubに登録し直したほうが良いでしょう。
実務で役立つトラブルシューティング
個人の学習だけでなく、プロジェクトチームでGitHubを使う際にも、SSH接続がうまくいかないケースはよく起きます。
ここでは、実務でありがちなケースを想定した対処法を紹介します。
共同開発で複数の鍵を使う場合
複数のプロジェクトで別々の鍵を使いたいとき、SSH設定を細かく管理することがあります。
例えば、~/.ssh/config
ファイルを編集して、プロジェクトごとに使う鍵を切り替える方法です。
Host github-projectA HostName github.com User git IdentityFile ~/.ssh/id_ed25519_projectA Host github-projectB HostName github.com User git IdentityFile ~/.ssh/id_ed25519_projectB
このように設定しておけば、git clone git@github-projectA:user/repo.git
というように接続先のHostを変えることで、違う鍵を使い分けることができます。
2段階認証とSSH鍵
チームでセキュリティを強化するために、GitHubアカウント自体に2段階認証を導入している場合があります。
SSH接続は別の仕組みで認証するため、パスワード入力ではなく、登録した秘密鍵で認証が完了すればOKです。
万が一エラーが出るときは、まずはSSH鍵自体の設定を改めて確認しましょう。
2段階認証の設定ミスではなく、単純にSSH鍵が正しく登録されていない可能性が多いです。
フォークやプルリクエスト関連での混乱
企業やチームでの開発では、他のリポジトリをフォークして開発するケースがあります。
リモートリポジトリが複数あり、「どのリモートにプッシュしようとしているか」が複雑になるとエラーが増えがちです。
リモート名を確認しながら、git remote -v
などのコマンドを使って、自分がどこへプッシュしようとしているか再確認すると解決策が見えてきます。
エラーを防ぐための日々の運用と対策
SSHエラーを完全になくすことは難しいですが、普段からいくつかの対策を意識しておくと、トラブルを大幅に減らせます。
鍵の定期的な更新
セキュリティ強化の観点から、同じSSH鍵を長期間使い回すのはリスクがあります。
大規模プロジェクトでは、鍵の有効期限を決めておき、一定期間ごとに新しい鍵を生成して差し替える運用をしていることがあります。
ファイル管理の見直し
秘密鍵を誤ってコミットしてしまったり、チームメンバー同士で使いまわしてしまったりすると、セキュリティリスクが高まります。
.gitignore
などで秘密鍵がリポジトリに含まれないよう、設定を徹底しましょう。
定期的なリポジトリアクセス確認
不要になった鍵をGitHubに登録しっぱなしにしているケースもあるかもしれません。
組織であれば誰がどの鍵を使っているか把握しにくくなります。
定期的に「この鍵はまだ使っているか」を確認し、不要になった鍵は削除しておくのがおすすめです。
まとめ
ここまで、GitHubでSSH接続を利用するときに起こりやすいエラーと対処法を解説しました。
SSH鍵は便利で安全性も高い反面、設定ファイルやパーミッションなど、正しく扱わないとエラーになりやすい特徴があります。
トラブルを解消する流れは、おおむね次のようなステップです。
- 鍵が正しく生成・配置されているか
- 公開鍵がGitHubに登録されているか
- パーミッションや
known_hosts
の整合性に問題ないか - リモートURLや利用するHost設定が合っているか
このあたりを順番に確認すると、大半の問題が解決に向かうはずです。
運用面では、秘密鍵のパーミッションを厳格に、公開鍵の登録状況を定期的にチェック、不要になった鍵を削除するといった対策を意識するだけでも、エラー発生リスクをかなり抑えられます。
皆さんがエラーを解消し、スムーズにGitHubでの開発を進められることを願っています。
ぜひトラブルに直面したときは本記事を参考に、一つひとつ原因を洗い出してみてください。