SSH访问报错:ssh_exchange_identification: read: Connection reset by pe

[复制链接]
发表于 2026-10-4 18:20:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

ssh 连不上时,终端冒一句 ssh_exchange_identification: read: Connection reset by peer 是最让人懵的报错之一——它只是说「对端在读我们身份交换阶段把连接重置了」,既不指方向也不指原因。结合另外一条常见提示 Permission denied (publickey,keyboard-interactive,hostbased),基本可以把问题收敛到两处:源地址被限、认证方式不匹配。本文给出定位路径与一份 sshd_config 参数速查。

一、先分清这两条报错

  • ssh_exchange_identification: read: Connection reset by peer:多出现在源地址限制场景——服务端把你的 IP 拉黑(/etc/hosts.deny、fail2ban、pam_access),sshd 在交换阶段就把 socket 复位;
  • Permission denied (publickey,keyboard-interactive,hostbased):认证方式不匹配——服务端启用了 keyboard-interactive,而你的客户端只提供了 password / publickey。

快速判断方向:ssh -v user@host 加详细日志日志。能在「Authenticated」前就断,多半是前者;能打印认证方法列表后失败,基本是后者。再加一层保险:ssh -vvv 看服务端返回的精确阶段。

二、解法一:对齐认证方式(最常见)

进服务端改 /etc/ssh/sshd_config,把 AuthenticationMethods 注释掉回到默认,或者显式写成与你客户端一致的方式:

sudo vi /etc/ssh/sshd_config
# AuthenticationMethods publickey keyboard-interactive
systemctl reload sshd

注意 Linux 下同一个配置项重复写,只有第一条生效。改完必须 reload 才生效,而且验证是否生效要查实际解析结果:

sshd -T | grep -i passwordauthentication
sshd -T | grep -i pubkeyauthentication

这一步能同时排掉「配了没生效」这个假故障——很多人改完直接重试,还是老报错,其实指令行只有第一条管用。

三、解法二:处理源地址限制

逐项核对(改完一个 reload 一个,别一次全改):

grep -vE "^#|^$" /etc/hosts.deny /etc/hosts.allow
sudo fail2ban-client status sshd
sudo grep sshd /var/log/secure | tail -20

如果是 fail2ban 误封(比如你跑了扫描脚本),解封用 fail2ban-client set sshd unbanip <IP>。生产机器务必先确认来源 IP 再解封,别顺手把别人挡在门外。

四、六种认证方式速查

sshd_config 里这些方式既要写进 AuthenticationMethods,也要显式开启(例如 PasswordAuthentication yes),只配一个是不生效的:

  • gssapi-with-mic(GSSAPIAuthentication yes):配合 Kerberos 的强认证与单点登录,企业域环境常见,安全性高;
  • hostbased(HostbasedAuthentication yes):基于主机密钥,依赖密钥分发管理,不推荐在不可信网络使用;
  • keyboard-interactive(KbdInteractiveAuthentication yes):交互式输入(验证码、二次口令一类),安全性取决于实现;
  • none(PermitEmptyPasswords yes):空密码登录,生产环境必须禁用;
  • password(PasswordAuthentication yes):普通口令,安全性取决于密码强度,明文链路下存在中间人风险;
  • publickey(PubkeyAuthentication yes):公钥认证,安全性与便利性最佳,默认首选。

日常运维结论很明确:能用公钥就别用口令,尤其面对公网机器。

五、UsePAM 这个坑

UsePAM 打通 PAM 的账户与会话模块处理所有认证类型;设为 yes 时会同时启用 KbdInteractiveAuthentication 与 PasswordAuthentication 的 PAM 认证。因为 PAM 的 keyboard-interactive 通常和口令认证扮演同一角色,同时开着建议禁用其中一个。

另外两个硬约束:UsePAM yes 时无法以非 root 身份运行 sshd;它默认就是 no,并且从 OpenSSH 9.x 左右开始已不支持 UsePAM 参数,老资料照抄会在新版本上直接报 unknown keyword。

六、排错顺序(照着走)

  1. ssh -vvv user@host 定阶段;
  2. 服务端 systemctl status sshd、journalctl -u sshd 看拒绝原因;
  3. 查 /etc/hosts.deny、fail2ban、pam_access;
  4. 对齐 AuthenticationMethods 与客户端可用方式;
  5. sshd -T | grep ... 验证实际生效值;
  6. sshd -t 先做配置语法自检,再 reload。

七、小结

回到那句难懂的 reset by peer:它不是原因,只是「连接在识别阶段被掐断」。把 ssh -vvv 的断点和 Permission denied (publickey,keyboard-interactive,hostbased) 的认证方法列表对上,问题几乎一定落在源地址限制或认证方式不对齐这两处。改 sshd_config 时牢记两点:重复项只有第一条生效、改完 reload 并用 sshd -T 核对。日常安全基线就一句:公钥登录 + 禁空密码 + 公网机器别开口令。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表