本文介绍了使用SSH客户端登录Linux实例提示“ssh_exchange_identification: read: Connection reset by peer”错误的解决方案。
问题描述
通过SSH客户端登录Linux实例时,确认用户名和密码正确的情况下,遇到了如下错误信息。
ssh_exchange_identification: read: Connection reset by peer.
sshd[11949]: refused connect from 192.168.0.0 (192.168.0.0).
问题原因
出现该问题可能有以下原因:
ECS实例内的TCP Wrapper文件配置不正确:TCP Wrapper是Linux系统中的标准安全框架,用于控制应用程序的访问。其守护进程tcpd通过读取
/etc/hosts.allow
和/etc/hosts.deny
两个文件中的相关配置,决定是否允许进行TCP连接。如果/etc/hosts.allow
或/etc/hosts.deny
文件配置错误,会导致SSH连接异常。您可以重新配置/etc/hosts.allow
或/etc/hosts.deny
文件解决该问题,具体操作,请参见方法一:编辑TCP Wrapper文件。ECS实例内liblz4.so.1文件丢失:liblz4.so.1文件是liblz4.so.1.7.5文件的软链接,该文件丢失会导致SSH连接异常。更多详情,请参见方法二:创建liblz4.so.1软链接。
本地公网IP被云安全中心拦截:请将本地公网IP添加到白名单,具体操作,请参见方法三:在云安全中心添加白名单。
本地网络连接异常:请检查本地网络,具体操作,请参见方法四:检查本地网络。
解决方案
方法一:编辑TCP Wrapper文件
参考以下步骤,通过修改配置文件动态设置访问策略,修改后无需重启服务器使配置生效。 本文以修改/etc/hosts.deny
为例进行说明。
通过VNC方式登录ECS实例。
具体操作,请参见通过密码认证登录Linux实例。
执行如下命令,查看
/etc/hosts.allow
或/etc/hosts.deny
文件中,是否包含类似all:all:deny
或sshd:IP地址:deny
配置。cat /etc/hosts.deny
如果不存在
all:all:deny
或sshd:IP地址:deny
配置,说明不是TCP Wrapper导致,请执行其他方案进行排查。如果存在
all:all:deny
或sshd:IP地址:deny
配置,请继续执行下一步。
修改
/etc/hosts.deny
文件。打开
/etc/hosts.deny
文件。在
all:all:deny
或sshd:IP地址:deny
前加#号,注释掉该配置。# all:all:deny # sshd:IP地址:deny
方法二:创建liblz4.so.1软链接
通过VNC方式登录ECS实例。
具体操作,请参见通过密码认证登录Linux实例。
执行如下命令,查找liblz4.so.1.7.5文件。
find / -name "liblz4*"
如果不存在liblz4.so.1.7.5文件,将其他正常ECS实例中的liblz4.so.1.7.5文件拷贝到该ECS实例
/usr/lib64/
中。执行以下命令,创建软链接。
ln -s liblz4.so.1.7.5 liblz4.so.1
方法三:在云安全中心添加白名单
如果在一个本地客户端网络连接ECS服务器时多次输入错误的登录信息,会导致此IP远程登录ECS的请求被拦截。您可以在云安全中心的设置中,添加本地IP至白名单,这样就不会对本地IP远程登录此服务器进行拦截,具体操作如下:
方法四:检查本地网络
请使用其他网络环境测试网络是否连接正常,例如手机4G网络,查看是否可以正常登录。
若可以正常登录,说明是本地网络问题,请自行排查。