ニュース

GitHubのSSHサーバーが.pubファイルを要求するようになった理由

ある開発者のgit pullが、GitHubのSSHフロントエンドが直接署名された公開鍵リクエストを拒否し始めたことで失敗した。修正方法は秘密鍵から.pubファイルを生成すること。

July 21, 2026· 1 min read· 出典: Erik Thorsell
GitHubのSSHサーバーが.pubファイルを要求するようになった理由

ある開発者が、何も変更していないマシンでgit pullが突然Permission denied (publickey)で失敗したと報告している。秘密鍵は有効で、署名アルゴリズムはrsa-sha2-512であり、別のキーを使う他のマシンは正常に動作していた。原因は?.pubファイルの欠落だ。

デバッグの迷宮

キーはopenssl rsa -checkを通過し、~/.ssh/configはクリーンで、GitHubのステータスページは緑色だった。それでも認証は失敗した。修正方法は秘密鍵から公開鍵ファイルを生成することだった:

$ ssh-keygen -y -f ~/.ssh/github_rsa > ~/.ssh/github_rsa.pub

著者はこれを.pubファイルありとなしで6回テストした。なし:毎回拒否。あり:毎回受け入れられた。

なぜ.pubファイルが動作を変えるのか

OpenSSHはRFC 4252に従って2つの認証フローを使用する。.pubファイルが存在する場合、クライアントはまず公開鍵を提示してサーバーの応答を待ち、その後署名を行う。 .pubファイルがない場合、OpenSSHはプローブをスキップし、直接完全署名された認証リクエストを送信する。標準のsshdは両方を受け入れるが、GitHubのSSHフロントエンドは現在、直接署名フローを拒否する。

GitHub側で何かが変わった

デバッグログのサーバーバナーは6a2c000を示しているが、GitHubのSSHフロントエンドは従来babeld-<hash>を使用していた。これは、直接署名された公開鍵方式を受け入れなくなった新しいサーバーソフトウェアを示唆している。タイミング——1時間前は動作し、次には壊れた——はサーバー側のデプロイメントと一致する。

これに遭遇した場合は、.pubファイルを再生成してほしい。そして、6a2c000が何か知っているなら、コミュニティは聞きたいところだ。