前言
最近在做ci和cd,cd的时候使用ssh连接到服务器的时候,出现问题
ssh read: Connection reset by peer
,这是咋回事前几分钟都是ok的,之后就出现这样的问题了
解题思路
- 检查服务器是否能ping通
ping 192.186.2.33
ping是通的,因为ping是底3层网络协议,这只能证明底3层网络协议是ok的,ssh是应用层协议,问题需要往上找
- 查日志
用ssh -v
连接有问题的服务器,会有详细信息输出到屏幕上,如果是客户端出了问题,在log中会打印,如果log中没有,则是服务端出了问题
ssh -v root@192.186.2.33
图片是网上找的一张,因为当时没有截图
从以上信息可以看出客户端没有什么问题,问题在服务端
- 服务端排查日志
service sshd stop
/usr/sbin/sshd -d
-d 是开启debug模式,服务器日志会输出在屏幕上,调试完后记得重新开启ssh服务service sshd start
如果你的日志中有debug1: Connection refused by tcp wrapper
之类的话,这说明可能你的客户端ip很可能被服务器禁了,fail2ban或者其他程序把你的客户端ip放到hosts.deny
和hosts.allow
文件中去了
Fail2ban是一项旨在保护您免受暴力攻击的服务,并且可能会将您的身份验证尝试误解为攻击。
Fail2ban监视并动态更改防火墙规则,以禁止表现出可疑行为的IP地址
在hosts.deny中和的hosts.allow文件是TCP包装。作为安全功能,这些文件用于限制可以建立到远程计算机的连接的IP地址或主机名
- 编辑文件
sudo nano /etc/hosts.deny
空行和以“#”符号开头的行是注释。检查是否可以在文件中找到本地IP或主机名。如果存在,则应将其删除或注释掉,否则它将阻止您建立远程连接,修改完毕后保存退出
客户端使用ssh连接后发现可以正常连接到服务端了
但是当你第二次使用ssh连接服务端的时候你会发现错误又出现了
因为我们需要编辑hosts.allow
文件他优于hosts.deny
文件中指定的规则,输入以下命令以访问hosts.allow文件:
sudo nano /etc/hosts.allow
添加以下规则
sshd: 客户端ip
保存退出后,重新使用客户端连接多少次都不会有问题了
检查sshd_config文件
如果继续遇到“ ssh_exchange_identification:读取:连接被对等方重置”错误,请检查身份验证日志条目。默认情况下,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服务
service sshd restart
你应该只改你熟悉的的配置,由于配置文件错误,很可能造成服务器无法访问