• 使用ssh登录远程服务器报错:kex_exchange_identification: Connection closed by remote host
  • 发布于 2个月前
  • 498 热度
    0 评论
一  问题起因
在公司,使用ssh登录远程服务器。有一天,mac终端提示:`kex_exchange_identification: Connection closed by remote host Connection closed by UNKNOWN port 65535`。 不知道为啥会出现这样的情形,最近这段时间登录都是正常的,不知道哪里抽风了,就提示这个。

二 解决方案
首先使用以下登录,打印登录过程中的日志,以便定位问题:
ssh -vvv user@host
br
如果从此时返回的信息中能够发现大量的提示都指向:
debug1: identify file /Users/<ComputerName>/.ssh XXXXXX
那就说明问题出在本机的配置上。找到known_hosts文件,将其清空,然后重新通过终端访问服务器主机。参考来源:

在这里,需要说明下,known_hosts文件里面到底存在的是啥。从MacOS的终端首次通过ssh登录远程主机时,会提示:

这里的意思是本地机无法确认远程主机的真实性,需要用户判断是否信任传来的RSA Key FingerPrint,键入yes后,会提示:
Warning: Permanently added 'xxx' (ED25519) to the list of known hosts.
此时就登录到远程服务器了:

此时意味着本地机已经接受了远程主机,并且会将此公钥保存在/.ssh/known_hosts中,以便之后的验证。

三 问题总结
错误信息 kex_exchange_identification: Connection closed by remote host 出现在尝试使用 SSH 连接到远程服务器过程中,表明在密钥交换阶段的一开始,远程主机就关闭了连接。这通常是由于以下原因之一造成的:
SSH频繁失败尝试:如果有大量失败的SSH登录尝试,某些服务器配置可能会启动自我保护并拒绝来自特定IP地址(或所有IP)的进一步连接。
最大连接数限制:远程服务器上可能设置了最大并发SSH会话数限制。如果当前已有太多活动连接,新的连接尝试可能会被拒绝。
SSH配置错误:服务器的sshd_config文件中配置错误,可能是不允许的加密算法、修订文件中的语法错误,或者未正确指定用于SSH的HostKey。
/etc/hosts.allow 和 /etc/hosts.deny 控制了对远程主机的访问。如果客户端的IP地址被列入了拒绝列表,则连接会被直接关闭。
SSH版本不匹配:远程服务器可能要求一个特定版本的SSH。如果其与客户端版本不一致,则可能导致连接被关闭。
防火墙或安全组策略:网络中的防火墙或云服务如AWS中的安全组可能设置了策略来阻断某些类型的流量,包括SSH。
服务器负载较高:如果服务器正在处理大量请求,或者资源耗尽(例如内存或CPU),它可能会主动拒绝新的连接。
TCP封装问题:在某些网络环境下,TCP包封装错误可能会导致连接意外关闭。

SSH服务故障:SSH服务可能由于各种原因(比如软件bug或者错误配置)出现故障,并主动关闭连接。


对此问题进行排查时可以考虑以下步骤:
1.确认远程服务器的IP地址和端口号是否正确。
2.检查本地客户端的SSH版本是否兼容远程服务器的要求。
3.登录到服务器检查sshd_config配置文件和相应的日志文件(如/var/log/auth.log 或 /var/log/secure),查找任何相关的错误信息。
4.如果你可以通过其他方式(如控制面板或物理访问)访问服务器,请检查SSH服务状态和系统资源情况。
5.跟踪网络连接,以确认是否有外部设备(比如防火墙或路由器)在干预SSH会话。
6.增加SSH客户端的日志级别,使用如ssh -vvv user@host命令添加详细日志输出,以获取更多调试信息。

用户评论