Azure Fail To Connected
SSH 连接失败排查记录
初始状态
- 客户端: 本地 Windows (OpenSSH 客户端)
- 服务器: 云平台 Linux 虚拟机 (Azure)
- 症状: 本地 SSH 客户端连接失败。
- 已知条件: 云平台自带的 Bastion(网页终端)可以正常登录。
排查模块一:服务器日志分析
- 问题:
sshd服务日志 (journalctl -u sshd) 显示多条警告和错误。Deprecated option RhostsRSAAuthentication(及其他Deprecated警告)error: Unable to load host key: /etc/ssh/ssh_host_dsa_key
- 排查过程:
- 分析
Deprecated警告:确认这些是sshd_config配置文件中的旧配置项,它们是“警告”而非“错误”,服务会忽略它们并正常运行。 - 分析
Unable to load host key:确认dsa_key是一种过时的密钥类型,新系统默认不生成。服务会跳过此密钥,正常加载其他(如 RSA, ED25519)密钥。
- 分析
- 结论: 服务器日志中的这些条目不是导致连接失败的原因。
排查模块二:网络连通性测试
问题: 本地客户端与服务器 22 端口之间的网络是否被防火墙(云平台 NSG 或系统防火墙)阻挡?
排查过程:
在本地 Windows PowerShell 终端执行端口连通性测试:
1
Test-NetConnection -ComputerName [服务器IP] -Port 22
结论:
- 命令返回
TcpTestSucceeded : True。 - 这证明网络路径畅通,且云平台防火墙 (NSG) 和服务器系统防火墙均正确允许 22 端口的流量。
- 命令返回
排查模块三:身份验证排查
问题: 网络畅通,为何连接失败?
排查过程 (1):分析服务器实时日志 (误导信息)
- 在服务器上运行
sudo journalctl -f -u sshd实时监控。 - 在本地尝试登录。
- 服务器日志显示
Failed password for root from [未知IP]。 - 分析: 日志中的用户名 (
root) 和源 IP ([未知IP]) 与本地客户端 (azureuser,[本地IP]) 不符。 - 结论: 这是来自互联网的“暴力破解”攻击,与本次排查的登录失败无关,属于背景噪音。
- 在服务器上运行
排查过程 (2):分析本地详细日志 (定位原因)
- 在本地客户端运行
ssh -vvv azureuser@[服务器IP]。 - 日志关键信息:
Connection established.(连接成功建立)Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu...(服务器为新版 OpenSSH)identity file F:\\...\\centos_tydi.pem type -1(本地正使用一个.pem密钥)- 日志在
SSH2_MSG_KEXINIT sent步骤后挂起并最终失败。
- 分析:
.pem密钥通常是较旧的ssh-rsa(SHA-1) 算法。新版 OpenSSH (9.6p1) 出于安全原因默认禁用了此算法。客户端与服务器无法在加密算法上达成一致,导致协商失败。
- 在本地客户端运行
解决方案 (1):升级密钥 (推荐)
- 生成新的
ed25519密钥对 (ssh-keygen -t ed25519)。 - 通过 Bastion 登录,将新
ed25519公钥添加到服务器的~/.ssh/authorized_keys。 - 修改本地
~/.ssh/config,将IdentityFile指向新ed25519私钥。 - 结果: 登录成功。
- 生成新的
解决方案 (2):兼容旧密钥 (不推荐)
修改本地
~/.ssh/config文件,为该主机添加:1
2HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa结果: 强制本地客户端启用旧算法,亦可登录成功。
排查模块四:周期性“连接超时”问题
问题: 使用新密钥登录成功后,过一段时间(如下次登录),又会偶发“连接超时”。
排查过程:
- 询问得知,用户通过 VPN 进行连接。
- 分析: VPN 服务在每次重连时会分配不同的出口 IP 地址。
- 云平台防火墙 (NSG) 规则被设置为仅允许单个 IP(上次登录的 IP)。
- 当 VPN IP 变化后,新 IP 被 NSG 拦截,导致“连接超时”。
解决方案:
- 修改云平台 NSG 入站规则,将 SSH (22端口) 的“源 (Source)”设置为
Any(0.0.0.0/0)。
- 修改云平台 NSG 入站规则,将 SSH (22端口) 的“源 (Source)”设置为
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.

