Azure DevOps SSH连接VM失败:无匹配密钥交换算法求助
解决Azure DevOps SSH服务连接握手失败(无匹配密钥交换算法)问题
问题原因
Azure DevOps流水线使用的SSH客户端支持的密钥交换(Kex)算法集合,与目标虚拟机SSH服务端当前允许的算法不匹配。本地Putty/OpenSSH客户端会自动协商匹配的算法,但Azure DevOps的SSH客户端库默认算法范围较窄,导致握手失败。即使你未主动修改配置,虚拟机的OpenSSH服务可能通过系统自动更新调整了默认允许的算法列表(比如禁用了部分旧版不安全算法)。
解决方案
方案1:调整虚拟机SSH服务端的密钥交换算法
- 登录目标虚拟机,编辑SSH服务配置文件:
sudo nano /etc/ssh/sshd_config - 添加或修改
KexAlgorithms配置项,包含Azure DevOps客户端支持的常见算法:KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512 - 重启SSH服务使配置生效:
# 适用于systemd系统(如Ubuntu 16.04+、CentOS 7+) sudo systemctl restart sshd # 适用于非systemd系统 sudo service ssh restart
方案2:在Azure DevOps SSH服务连接中指定密钥交换算法
- 进入Azure DevOps项目的项目设置 > 服务连接,找到目标SSH服务连接并编辑。
- 展开高级选项,在SSH额外参数中添加强制使用的密钥交换算法参数,例如:
注:这里的算法需是你的虚拟机服务端已允许的,可以通过在本地执行-o KexAlgorithms=curve25519-sha256@libssh.orgssh -Q kex查看本地客户端支持的算法,选择其中与服务端匹配的项
验证
修改完成后,重新运行Azure DevOps流水线,检查SSH连接任务是否正常执行。
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

