GitHub公式の接続確認コマンドは ssh -T git@github.com です。まずGitコマンドが手元の端末とリモートMacのどちらで動いているかを確かめ、その実行環境に対応する認証情報を設定してください。秘密鍵をiPadや一時利用の共有端末へ安易にコピーしてはいけません。リモートMacで適切に保管できない場合は、組織のルールに合う別の認証方法を選ぶか、その環境での操作を見合わせましょう。(GitHub公式のSSH接続確認手順)
この記事は、旅先でリモートMacを使い、GitHubへの接続でつまずいた個人開発者向けです。
iPad、軽量ノート、リモートMacの間で作業場所を切り替えるデジタルノマドや、共有環境に鍵が残ることを心配する技術顧問にも役立ちます。
最初の切り分け:手元の端末とリモートMacを混同しない
リモートデスクトップの画面で開いたターミナルからGitを実行したなら、認証に使われるのは基本的にそのMac側のSSH環境です。iPadやノートのローカルターミナルで実行したなら、そちらの端末の環境が対象です。画面を操作している端末と、コマンドを実行している端末は同じとは限りません。
GitHub SSHの認証失敗が起きたとき、まず何を見ればよいですか?
問題が起きたターミナルで hostname と whoami を実行し、ホスト名とユーザーを記録します。続けて git remote -v で接続先を確認してください。これで、iPad上の鍵を探すべきか、リモートMac上の鍵を調べるべきかが定まります。
次のように、症状から調査対象を絞ります。すべてを「ネットワークの問題」として扱うと、アカウントやリポジトリ権限の確認が後回しになります。
| 表示・症状 | 先に確認すること | 次の確認 |
|---|---|---|
Permission denied (publickey) |
実行端末に鍵があるか、SSHがその鍵を提示しているか | GitHubアカウントに対応する公開鍵が登録されているか |
| 接続テストでアカウントを識別できない | 鍵のパス、ssh-agent の登録状態 |
接続時に使われた鍵とアカウントの対応 |
| 接続テストは成功するが、リポジトリ操作は拒否される | git remote -v の接続先 |
リポジトリへのアクセス権とURL |
| 接続がタイムアウトする | 実行端末から接続先へ通信できるか | SSHのトラブルシューティングとネットワーク制限 |
GitHubの接続テストでアカウントが識別されても、特定リポジトリへの権限まで保証されるわけではありません。SSH認証とリポジトリへのアクセス許可は別の確認項目です。GitHubのSSHトラブルシューティングとリポジトリのクローン時に起きる権限エラーの説明を照合してください。
2段階目:接続はできるのに、リポジトリ操作が拒否される
GitHub SSH鍵は、公開鍵をアカウントに登録して使います。秘密鍵を登録するのではありません。認証に失敗したら、GitHubに登録した公開鍵が、いまコマンドを実行している端末の秘密鍵と対になっているかを確認します。GitHubのSSH認証の仕組みでも、SSH鍵を使ったGit操作の認証と公開鍵の登録が説明されています。
鍵、アカウント権限、通信のどれが原因かは、どう判断できますか?
まず ssh -T git@github.com を実行します。接続時にGitHubがアカウントを識別できない場合は、鍵の選択や登録を確認します。識別に成功しても実際のリポジトリ操作が拒否されるなら、接続先URLとアカウントの権限を調べます。タイムアウトなど接続自体が成立しない場合は、実行端末のネットワーク条件も確認してください。
複数の鍵を使っている場合は、どの鍵が提示されたかも調べます。詳細な接続ログを確認する ssh -vT git@github.com は、鍵の探索や認証段階を調べる助けになりますが、ログには環境情報が含まれる可能性があります。公開の場へ貼り付ける前に、ホスト名やユーザー名などを確認してください。
第三段階:鍵が見つからないなら、生成前に保管場所を決める
GitHub SSH鍵は、どの端末に置けばよいですか?
Git操作を実行する端末の、あなたが管理できる環境に置きます。リモートMacのターミナルでGitを使うなら、そのMacで既存鍵を確認し、必要なら専用鍵を作成します。iPadのターミナルから直接Gitを使うなら、その端末が対象です。秘密鍵を端末間でコピーして解決するのではなく、鍵の保管と撤回を管理できる実行環境を選んでください。
鍵を新しく作る前に、既存の鍵を確認します。GitHubの既存SSH鍵の確認手順を見ながら、対象ユーザーの ~/.ssh/ にあるファイルを調べます。既存鍵を上書きすると、別の作業環境で使っている認証まで壊すおそれがあります。
鍵がなければ、用途を分けた鍵を作成し、対応する公開鍵だけをGitHubアカウントに登録します。GitHubは新しいSSH鍵を生成してssh-agentに追加する手順と、公開鍵をアカウントに追加する手順を案内しています。秘密鍵の中身をチャットやチケットへ貼らず、アップロードもしないでください。
中盤の確認点:毎回パスフレーズを求められる場合
SSH鍵のパスフレーズ、GitHubアカウントの認証、リモートMacへのログイン認証は別物です。同じ入力欄に見えても、何を求められているかを表示内容で確認してください。再接続やセッションの再開後に再入力が求められる場合、ssh-agent に鍵が登録されていない、ログインセッションが作り直された、またはmacOSのキーチェーン連携が設定されていない可能性があります。
macOSの再起動やセッション切断後に、なぜ再び入力を求められますか?
接続が切れた後もエージェントの状態が維持されるとは限りません。まず ssh-add -l で、現在のセッションに鍵が登録されているかを確認します。macOSの設定は、GitHubの鍵とssh-agentの手順に沿って確認し、再接続後に接続テストをやり直してください。パスフレーズをキーチェーンで扱う設定は、鍵の保護を解除することとは異なります。
鍵を共有環境に残さない:撤回まで含めて管理する
自分で管理するリモートMacと、他の利用者が触れられる共有端末では、秘密鍵を置くリスクが異なります。借用端末や一時的なMacに鍵を残すと、端末を離れた後にファイルを削除できたか確かめにくいことがあります。SSH agent転送も万能な安全策ではありません。接続先やセッションの管理範囲を把握できないなら、安易に有効化しないでください。
公開鍵を古い端末用のまま残していないか、どのアカウントとリポジトリに結び付いているかを定期的に確認します。秘密鍵が流出した疑いがある場合は、端末内のファイル削除だけで済ませず、GitHubアカウントから該当する公開鍵を撤回し、新しい鍵へ切り替えます。GitHubの登録済みSSH鍵の確認と削除方法で、不要な鍵を確認できます。
復旧の区切り:実際のリポジトリで受け入れ確認する
共有または一時的なリモートMacから、鍵をどう撤回すればよいですか?
そのMacで使っていた鍵に対応する公開鍵をGitHubアカウントで特定し、不要または流出の疑いがある鍵を削除します。秘密鍵を置いた端末からファイルを消すだけでなく、アカウント側の登録も確認してください。端末を管理できず、鍵の保管状況や削除を確かめられない場合は、その端末での認証を避ける判断が必要です。
Macの「リモートログイン」はSSHまたはSFTPでMacへ接続する機能ですが、それ自体がGitHubアカウントへのアクセスを許可するわけではありません。AppleのMacでリモートログインを設定する説明も確認し、Macへ入る認証とGitHubの認証を分けて管理しましょう。
復旧後は、実際に作業するリポジトリで、必要な読み取り操作と書き込み操作をそれぞれ確認します。読み取りができても、書き込み権限があるとは限りません。作業場所、鍵の保管端末、agentの状態、鍵を撤回するアカウントを記録しておけば、次の移動や端末交換で同じ調査をやり直さずに済みます。
- [ ]
hostnameとwhoamiでGitコマンドの実行端末を確認した - [ ]
git remote -vで対象リポジトリを確認した - [ ] 既存鍵と公開鍵の登録先を照合し、秘密鍵をコピーしていない
- [ ]
ssh -T git@github.comでアカウントの識別結果を確認した - [ ] 実際のリポジトリで必要な読み取り・書き込み操作を確認した
- [ ] 不要な鍵を撤回するアカウントと手順を特定した
旅先での作業を続けるか、環境を切り替えるか
手元の端末だけで作業すれば、リモート環境の管理は不要ですが、必要なmacOS環境を使えない場合があります。旅先の共有端末に秘密鍵を置けば、保管と撤回の確認が難しくなります。個人所有のMacを持ち歩く方法もありますが、機器の紛失や故障時には手元で同じ環境を使えなくなる可能性があります。
継続してmacOSで開発する必要があるなら、リモートMacを候補にできます。ただし、鍵を安全に置けるか、利用者やアクセス範囲を確認できるかを先に調べてください。VMSPINのリモートMac利用案内や料金プランを確認し、接続方法と権限の範囲を把握したうえで、プロジェクトの認証情報を預ける環境として適切か判断しましょう。管理境界を確かめられない場合は、鍵を置かず、別の認証経路を選ぶか作業を保留してください。