用 ssh -v(或 -vv/-vvv)可查看完整连接日志,涵盖 DNS 解析、密钥加载、认证尝试等步骤;-vv 适合日常排查,配合 -o ConnectTimeout=5 跳过交互,结合 grep/sed 过滤关键信息定位免密失败原因。
用 ssh -v(或更高详细级别)就能看到完整的连接过程日志,从 dns 解析、密钥加载、认证尝试到最终登录,每一步都清晰输出。
基础调试:用 -v 参数逐级查看
SSH 提供三级详细模式:-v(基础)、-vv(中等)、-vvv(最详细)。日常排查连不上、卡在某步时,-vv 通常就够用。
-
最低限度验证:运行
ssh -v user@host,观察是否能解析主机名、是否找到私钥、是否发起认证请求 -
重点看关键行:留意含
debug1:、Offering public key、Authentication succeeded、Permission denied的输出 -
跳过交互提示:加
-o ConnectTimeout=5防止卡在未知主机确认或密码输入上,让日志快速跑完
定位免密失败:重点关注密钥加载与认证环节
如果配置了公钥但还是弹密码,-vv 日志里会明确告诉你问题在哪:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 没读到私钥?找
identity file /Users/xxx/.ssh/id_rsa后是否跟not found或bad permissions - 密钥格式不支持?出现
key_load_public: invalid format表示公钥文件损坏或类型不匹配 - 服务端拒绝该密钥?看到
Authentication refused: bad ownership or modes for directory,说明服务端~/.ssh权限太宽松(需 700),或authorized_keys权限不是 600
配合 LogLevel 查看服务端响应
客户端日志只反映“我做了什么”,有时需确认服务端是否收到、如何处理。可在连接命令中指定日志等级:
-
ssh -o LogLevel=INFO user@host:比-v更简洁,适合快速确认流程节点(如是否启用 pubkey、是否尝试密码) -
ssh -o LogLevel=DEBUG2 user@host:接近-vv效果,但更聚焦协议层细节,比如密钥交换算法协商结果 - 注意:
DEBUG3会打印敏感信息(如加密前的密钥材料),仅调试时临时使用,勿截图或留存
进阶技巧:过滤和保存日志便于分析
日志内容多时,可直接重定向或管道过滤:
- 保存完整日志:
ssh -vv user@host 2>&1 | tee ssh-debug.log - 只看认证相关行:
ssh -vv user@host 2>&1 | grep -i "auth\|key\|pubkey" - 排除冗余信息(如时间戳、调试编号):
ssh -vv user@host 2>&1 | sed 's/^debug[0-9]*://'

















