Azure DevOps と SSH:post-quantum の警告、「Public key authentication failed」、RSA だけの鍵
2026年に Azure DevOps Services を SSH の Git で使う人が出会う3つのことです。OpenSSH 10.1 からはコマンドのたびに出る警告、理由を言わずに断られる鍵、そもそも受け付けられない Ed25519 の鍵。どのアカウントにも登録していない使い捨ての鍵に ssh.dev.azure.com が2026年10月28日に返した答えと、Microsoft の Use SSH key authentication(2026年6月17日更新)の説明です。
「WARNING: connection is not using a post-quantum key exchange algorithm」
** WARNING: connection is not using a post-quantum key exchange algorithm. ** This session may be vulnerable to "store now, decrypt later" attacks. ** The server may need to be upgraded. See https://openssh.com/pq.html
(「この接続は post-quantum の鍵交換の方式を使っていない。この通信は『今ためて後で解く』攻撃に弱いかもしれない。サーバーを新しくする必要があるかもしれない」)サーバーが post-quantum の鍵交換を出さないとき、OpenSSH 10.1 以降はこう出します(OpenSSH の説明)。Git for Windows は 2025年10月の版 2.51.1 から OpenSSH 10.2 以降を入れているので、Windows では SSH の git fetch・pull・push のたびにこの警告が出ます。
2026年10月28日、ssh.dev.azure.com との鍵交換は diffie-hellman-group-exchange-sha256 に決まりました。比べると、bitbucket.org は post-quantum の mlkem768x25519-sha256 で、警告は出ません。2026年5月の Microsoft Q&A の問いでは、Microsoft のモデレーターが、Azure DevOps の SSH はまだ post-quantum の鍵交換に対応しておらず、予定も公表されていない、警告は無視してかまわない、と答えています。
警告で止まるものはなく、コマンドはそのまま続きます。Azure DevOps のときだけ黙らせるには(OpenSSH も対象を絞るよう勧めています)、~/.ssh/config(Windows では %UserProfile%\.ssh\config)に次を足します。
Host ssh.dev.azure.com vs-ssh.visualstudio.com
IgnoreUnknown WarnWeakCrypto
WarnWeakCrypto no-pq-kex
IgnoreUnknown の行は消さないでください。Windows 自身の OpenSSH(C:\Windows\System32\OpenSSH・版 9.5)も同じファイルを読み、この行が無いと Bad configuration option: warnweakcrypto(「知らない設定がある」)ですぐに止まります。この行があれば、私たちの試しでは両方の版がつながりました。Azure DevOps Server では、Host の行に自分のサーバーのホスト名を書きます。
「remote: Public key authentication failed.」
remote: Public key authentication failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
(「公開鍵での認証に失敗した。リモートのリポジトリを読めない」)10月28日、どのプロフィールにも無い RSA の鍵に、Azure DevOps は非公開のリポジトリでも公開のリポジトリでもこう答えました。SSH では、公開リポジトリでも Azure DevOps の知っている鍵が要ります。Microsoft の挙げる理由:
- 鍵がプロフィールに無い(User settings › SSH public keys)か、このリポジトリの組織のものではない。指紋を比べます:
ssh-keygen -l -E sha256 -f ~/.ssh/id_rsa.pubと、プロフィールに出ている指紋。 - SSH が別の鍵を先に出した。Azure DevOps は、クライアントが最初に出した鍵だけを見て、ほかの鍵は試しません。SSH エージェントの鍵や GitHub 用の鍵が先に出ることがあります。Azure DevOps 用の鍵を名指しし、それだけを出させます。
Host ssh.dev.azure.com IdentityFile ~/.ssh/id_rsa_azure IdentitiesOnly yes組織ごとに鍵を分けるときは、Microsoft のページにホストの別名(git@devops_fabrikam:v3/…)の例があります。 - 鍵の期限が切れた。そのときは Azure DevOps が先にそう言います:
remote: Authentication failed: your SSH key has expired.(「SSH の鍵の期限が切れた」)。Microsoft は7日前に知らせを送ります。新しい鍵を足します。管理者が Validate SSH key expiration の方針を切ることもできます。
ssh -T git@ssh.dev.azure.com だけで確かめないでください。Azure DevOps の知らない RSA の鍵でも、使える鍵と同じ remote: Shell access is not supported.(「シェルは使えない」)が返りました。確かめるなら、そのリポジトリに git ls-remote を打ちます。
Ed25519 と ECDSA の鍵:「Permission denied (password,publickey)」
git@ssh.dev.azure.com: Permission denied (password,publickey). fatal: Could not read from remote repository.
(「拒否された」)Azure DevOps が受け付けるのは RSA の鍵だけです。Microsoft のページは「SSH の認証には RSA の鍵に対応」と書き、ssh-keygen -t rsa -b 3072 で作っています。10月28日、Ed25519 の鍵は、Azure DevOps がリポジトリを見る前にこうして断られました。OpenSSH 9.5 からは、-t を付けない ssh-keygen は Ed25519 の鍵を作るので、作ったばかりの既定の鍵がよくある場合です。Azure DevOps 用に RSA の鍵を作り、上の Host の設定でそれを指します。
ssh-rsa の文
ssh-rsa is about to be deprecated and your request has been throttled、… your request has been blocked intentionally、You're using ssh-rsa that is unsupported(「ssh-rsa は廃止に向かっている/使えない」):Microsoft の直し方は、SSH の設定からHostkeyAlgorithms +ssh-rsaを消し(古い回答が足すよう書いていた行です)、SSH にrsa-sha2-256かrsa-sha2-512を使わせることです。RSA の鍵はそのままで、古い SHA-1 の署名だけがなくなります。10月28日は、何も設定しないままrsa-sha2-512でつながりました。Unable to negotiate with … port 22: no matching host key type found. Their offer: ssh-rsa(「ホスト鍵の種類が合わない」):Microsoft は、Azure DevOps Services や新しい Azure DevOps Server では起きないはずだとし、HostkeyAlgorithms +ssh-rsaは古い自前のサーバーのときだけとしています。- Git LFS のファイル:Azure DevOps Services は SSH での LFS に対応していません。そのリポジトリは HTTPS で使います。
IntelliJ IDEA・Rider で Azure DevOps のプルリクを見るなら
Azure DevOps Pull Requests は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。組織・プロジェクト・リポジトリを、HTTPS のリモートと同じように SSH のリモート(git@ssh.dev.azure.com:v3/…)からも読みます。Azure DevOps の REST API とは、自分の個人用アクセス トークンか Azure CLI で HTTPS で話すので、SSH の鍵や設定には左右されません。受信箱は無料、投票・コメント・完了は Pro(月 US$1・30日間の無料試用つき)です。画面は日本語です。
Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:HTTPS での「fatal: Authentication failed」 · Git Credential Manager 3.0 と Azure Repos · English