测试SSH密钥认证连通性本质是验证私钥能否通过服务端公钥校验,需同时满足TCP可达、sshd运行、密钥匹配、权限合规(私钥600、authorized_keys 600、.ssh目录700)、PubkeyAuthentication启用;须用ssh -vvv观察是否出现“Server accepts key”及“Authentication succeeded”,并结合服务端auth.log排查Failed publickey等日志。

测试 SSH 密钥认证的连通性,本质是验证「私钥能否成功通过服务端公钥校验」,而不仅仅是端口通不通。它需要同时满足:TCP 连通、sshd 服务运行、密钥配置正确、权限合规、认证方式启用。不能只靠 ssh -v 看是否“连上”,更要关注日志中是否进入密钥交换阶段。
确认基础网络与服务状态
先排除底层障碍,避免误判密钥问题:
- 用
nc -zv 目标IP 22或telnet 目标IP 22验证 TCP 层可达(注意:若系统无 telnet,nc 更通用) - 在目标服务器上执行
systemctl status sshd(CentOS/RHEL)或systemctl status ssh(Ubuntu/Debian),确认服务 active - 检查监听地址:
ss -tlnp | grep ':22',确保不是仅绑定127.0.0.1,否则外部无法连接 - 查看防火墙:
sudo firewall-cmd --list-all(firewalld)或sudo ufw status(ufw),确认 22 端口已放行
验证密钥本身是否可用且匹配
本地私钥必须有效,且对应公钥已正确部署到服务端:
- 检查私钥文件权限:
ls -l ~/.ssh/id_rsa,应为-rw-------(600),否则 ssh 会拒绝使用 - 用
ssh-keygen -l -f ~/.ssh/id_rsa查看本地私钥指纹,再登录目标服务器,对比~/.ssh/authorized_keys中对应公钥的指纹(ssh-keygen -l -f ~/.ssh/authorized_keys) - 确认公钥已写入目标用户的
~/.ssh/authorized_keys,且该文件权限为600,目录~/.ssh权限为700
用调试模式观察认证全流程
执行带详细日志的连接命令,重点识别关键提示:
- 运行:
ssh -vvv -p 22 username@目标IP(-vvv 比 -v 输出更全) - 成功路径特征:
debug1: Next authentication method: publickey→debug1: Offering public key: /path/to/id_rsa→debug1: Server accepts key→debug1: Authentication succeeded - 失败常见提示:
Authentication refused: bad ownership or modes(权限错误)、No supported authentication methods available(服务端禁用了 pubkey 认证)、Permission denied (publickey)(公钥未匹配或未加载)
检查服务端 SSH 配置与日志
客户端看不到的限制,需在服务端确认:
- 检查
/etc/ssh/sshd_config中关键项:PubkeyAuthentication yes、AuthorizedKeysFile .ssh/authorized_keys、AllowUsers username(若启用) - 实时跟踪认证日志:
sudo tail -f /var/log/auth.log(Debian/Ubuntu)或sudo tail -f /var/log/secure(RHEL/CentOS) - 尝试连接时,日志中出现
Failed publickey for username表示密钥被收到但校验失败;User username from IP not allowed because not in AllowUsers则说明用户被策略拦截


















