Ubuntu20升级到22后Azure Pipeline SSH连接失败,如何调试?
Azure Pipeline SSH连接认证失败排查方案
一、与TLS公告的关联说明
你的认证失败问题和Azure DevOps的TLS禁用公告无关。该公告针对的是Azure DevOps服务与工具之间的通信协议,而你遇到的是Pipeline到Ubuntu服务器的SSH连接认证问题,属于服务器端SSH配置范畴,二者没有直接关联。
二、具体调试排查步骤
1. 检查Ubuntu 22.04的SSH服务配置
Ubuntu 22.04的sshd_config默认设置与20.04有差异,重点核查以下配置项:
- 确认
PubkeyAuthentication设为yes - 检查
AuthorizedKeysFile路径是否为默认的.ssh/authorized_keys .ssh/authorized_keys2 - 若Pipeline使用root用户连接,确认
PermitRootLogin设为yes或prohibit-password - 确保
PasswordAuthentication的设置符合你的认证方式(密钥认证时设为no不影响)
修改后重启SSH服务:
sudo systemctl restart sshd
2. 修复服务器端密钥文件权限
即使本地能正常连接,服务器上的权限配置可能不符合SSH的严格要求:
.ssh目录权限需为700authorized_keys文件权限需为600- 用户家目录权限不能为
777等开放权限
执行命令修复:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod go-w ~/
3. 查看SSH服务日志定位具体错误
通过实时日志获取认证失败的详细原因:
sudo journalctl -u sshd -f
触发Pipeline的SSH任务后,观察日志中的错误信息(如密钥格式不兼容、用户权限不足、密钥未被信任等)。
4. 验证Azure Pipeline的SSH服务连接配置
- 核对服务连接中的用户名、主机地址与本地连接的参数是否一致
- 确认上传到Azure DevOps的密钥无格式错误(如多余换行、缺失
-----BEGIN RSA PRIVATE KEY-----等标识) - 若使用自托管代理,确保代理机器能访问到指定的密钥文件
5. 在代理机器上手动测试SSH连接
如果使用自托管代理,在代理机器上执行带 verbose 参数的SSH命令,模拟Pipeline的连接场景:
ssh -i /path/to/key username@server-ip -v
通过输出的详细日志定位与Pipeline相同的故障点。
三、额外排查方向:SSH算法兼容性
Ubuntu 22.04默认禁用了部分旧SSH算法,若Pipeline使用的SSH客户端版本较旧,可能存在算法不兼容。可临时在sshd_config中启用旧算法测试:
KexAlgorithms +diffie-hellman-group1-sha1 Ciphers +aes128-cbc,3des-cbc
重启SSH后测试,若能连接,再逐步调整为安全的算法组合。
内容的提问来源于stack exchange,提问作者Aysennoussi
相关产品推荐
相关产品推荐

