Azure DevOps ちほーの git サーバーへ git@ssh しようとしたら Unable to negotiate で diffie-hellman-group1-sha1,diffie-hellman-group14-sha1 を提案されたら思い出すメモ
状況
git clone git@ssh.dev.azure.com:v3/my_team/my_project/my_repos Cloning into 'my_repos'... Unable to negotiate with 40.81.25.218 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1 fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
エラーメッセージ訳:
40.81.25.218:22 との交渉はダメでした。鍵交換方式が合いません。
diffie-hellman-group1-sha1
,diffie-hellman-group14-sha1
とか試してみたらいいかもね。
解決方法
~/.ssh/config
にそういう事を言う git サーバー用の接続設定を特殊化します。今回の例だと ssh.dev.azure.com
に対して特殊化します:
Host ssh.dev.azure.com User git Port 22 HostName ssh.dev.azure.com IdentityFile ~/.ssh/id_rsa TCPKeepAlive yes IdentitiesOnly yes KexAlgorithms +diffie-hellman-group1-sha1
ついで設定もありますが、今回の解決方法の要は KexAlgorithms
を Host
/HostName
に対して設定している部分です。 "Kex" は "Key-eXchanging" とかそんなノリでしょうね。😅
ちなみに、 Azure DevOps の場合は残念ながらいまだに ECDSA とか使えず RSA 鍵を使わなければならないので IdentityFile
の特殊化も事実上必須です。かなしい。