修复ssh_exchange_identification: read错误介绍
远程计算机阻止了你尝试建立或维护的SSH 连接。“ssh_exchange_identification: read: Connection reset by peer”消息不够具体,无法立即解释触发错误的原因。
为了能够成功解决问题,我们首先需要确定其原因。本文对可能的原因进行了深入分析,并提供了最有效的解决方案。
通过阅读本教程,你将学习如何修复“ssh_exchange_identification: read: Connection reset by peer”错误。
先决条件
- 访问远程服务器的必要权限
- 具有 root 或sudo权限的用户帐户
是什么导致“Connection reset by peer”SSH 错误?
“ssh_exchange_identification: read: Connection reset by peer”错误表明远程机器突然关闭了传输控制协议 (TCP) 流。在大多数情况下,远程服务器的快速重启可能会解决临时中断或连接问题。
注意:基于网络的防火墙或负载平衡器有时会扭曲 IP 或安全权限。此类问题可以通过联系你的服务提供商来解决。
了解如何解决此问题并确定根本原因,可帮助你防止系统将来发生此类事件。“ssh_exchange_identification: read: Connection reset by peer”错误的最常见原因是:
- 由于基于主机的访问控制列表,连接被阻止。
- 入侵防御软件通过更新防火墙规则(Fail2ban、DenyHosts 等)来阻止你的 IP 。
- 对 SSH 守护程序配置文件的更改。
检查 hosts.deny 和 hosts.allow 文件
在hosts.deny中和的hosts.allow文件是TCP包装。作为一项安全功能,这些文件用于限制哪些 IP 地址或主机名可以与远程机器建立连接。
注意:检查远程服务器上的hosts.deny和hosts.allow文件,而不是本地客户端上。
如何编辑 hosts.deny 文件
访问远程服务器并使用首选文本编辑器打开hosts.deny文件。如果你在基于 Debian 的系统上使用nano,请输入以下命令:
sudo nano /etc/hosts.deny
空行和以“#”符号开头的行是注释。检查是否可以在文件中找到本地 IP 或主机名。如果存在,则应将其删除或注释掉,否则会阻止你建立远程连接。
进行必要的更改后,保存文件并退出。尝试通过 SSH 重新连接。
如何编辑 hosts.allow 文件
修复ssh_exchange_identification: read错误:作为额外的预防措施,请编辑hosts.allow文件。首先应用hosts.allow中的访问规则。它们优先于hosts.deny文件中指定的规则。输入以下命令以访问hosts.allow文件:
sudo nano /etc/hosts.allow
向文件中添加主机名和 IP 定义了hosts.deny文件中设置的例外情况。
例如,etc/hosts.deny文件中的严格安全策略将拒绝对所有主机的访问:
sshd : ALL
ALL : ALL
随后,你可以向 etc/hosts.allow 文件添加单个 IP 地址、IP 范围或主机名。通过添加以下行,仅允许以下 IP 与你的远程服务器建立 SSH 连接:
sshd : 10.10.0.5, LOCAL
请记住,这种限制性的安全设置可能会影响远程服务器上的管理功能。
检查fail2ban是否禁止了你的IP地址
如果你多次尝试连接,你的 IP 可能被入侵防御软件阻止。Fail2ban是一项旨在保护你免受暴力攻击的服务,它可能会将你的身份验证尝试误解为攻击。
Fail2ban 监控并动态更改防火墙规则以禁止表现出可疑行为的 IP 地址。它监控日志,比如我们之前编辑过的hosts.deny和hosts.allow文件。
在我们的示例中,我们使用以下命令来检查iptables工具是否拒绝你尝试的连接:
sudo iptables -L --line-number
终端窗口中的输出将列出所有身份验证尝试。如果你发现防火墙确实阻止了你的 SSH 连接,你可以使用 fail2ban 将你的 IP 列入白名单。否则,该服务将不断阻止所有未来的尝试。要访问 fail2ban 配置文件,请输入以下命令:
sudo nano /etc/fail2ban/jail.conf
通过取消注释包含"ignoreip ="
添加要列入白名单的 IP 或 IP 范围的行来编辑文件。
Fail2ban 现在会例外,并且不会报告相关 IP 的可疑行为。
修复ssh_exchange_identification: read错误: 检查 sshd_config 文件
如果你继续遇到“ssh_exchange_identification: read: Connection reset by peer”错误,请检查身份验证日志条目。默认情况下,SSH 守护进程将日志信息发送到系统日志。在尝试登录失败后访问/var/log/auth.log文件。要查看最新的日志条目,请键入:
tail -f /var/log/auth.log
输出显示你的身份验证尝试的结果、有关你的用户帐户、身份验证密钥或密码的信息。
该日志为你提供可帮助你查找 sshd 配置文件sshd_config 中可能存在的问题的信息。对文件所做的任何更改都会影响建立 ssh 连接的条款,并导致远程服务器将客户端视为不兼容。要访问sshd_config文件类型:
sudo nano /etc/ssh/sshd_config
sshd 配置文件使你能够更改基本设置,例如用于身份验证的默认 TCP 端口或 SSH 密钥对,以及更高级的功能,例如端口转发。
例如,该MaxStartups
变量定义了系统在预定义时间段内接受的连接数。如果你的系统在短时间内建立大量连接,则可能需要增加此变量的默认值。否则,远程系统可能会拒绝其他尝试的 ssh 连接。
每次编辑sshd_config文件时,请重新启动 sshd 服务以使更改生效:
service sshd restart
只编辑你熟悉的变量。由于配置文件错误,服务器可能无法访问。
修复ssh_exchange_identification: read错误总结
你已经彻底检查了“ssh_exchange_identification: read: Connection reset by peer”错误背后的最常见原因。反过来,通过查看每种可能性,你已经成功解决了问题,并且现在知道如何处理未来的类似问题。
潜在原因的数量很多,而且很难在各个方面进行故障排除。最终,如果错误仍然存在,则可能需要联系你的主机。