SSH连接报错"kex_exchange_identification read Connection reset by peer"


1. 问题

Hexo -d部署的时候报错如下。

kex_exchange_identification: read: Connection reset by peer
Connection reset by 140.82.***.*** port 22

查阅文章,尝试了好多种方法,都无效。但经过排查,初步原因可能是网络端口阻断了,公司网络有所限制,使用手机热点网络,部署正常。

最终是通过修改ssh文件夹中config文件内容,解决了此问题。

2. 解决

找到文件~/.ssh/config,编辑文件添加以下部分内容。若ssh’文件夹里没有此文件,新建一个即可。

Host github.com
Hostname ssh.github.com
Port 443
User git

添加好之后,重新部署即可。

3. 其他可能的解决方法

当然也可以试试以下方法,根本原因不同,不一定有个方法就有用了。

3.1. 修改hosts.allow文件

第一,在/etc/hosts.allow文件中添加sshd: ALL,就是允许所有ip主机均能连接本机

第二,重启ssh,输入命令systemctl restart sshd

若是要限制只有某些IP地址可以连接该主机,则在/etc/hosts.allow文件中添加允许的主机IP(如:sshd:192.168.2.130:allow),然后再到/etc/hosts.deny文件中添加sshd:ALL,拒绝所有(除了/etc/hosts.allow文件中允许的IP地址),这样就可以达到除了设置允许的IP地址可以连接,其他的IP主机都无法连接的效果。

第三,配置完成后使用git clone命令拉取代码。

git clone git@github.com:用户名/仓库名.git

接着会有如下提示:

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'github.com,xx.xx.xx.166' (ECDSA) to the list of known hosts.

输入yes,之后即可正常部署。

3.2. 使用ssh-keygen -R

可能原因是SSH无法登陆主机,更新指令即可。

ssh-keygen -R XXX.XXX.XXX.XXX   //XXX.XXX.XXX.XXX为要登陆主机的IP地址

3.3. 修改known_hosts文件

3.3.1. 解决方法

首先使用以下命令debug登录过程,以便定位问题:

ssh -v <username>@<password>

如果你从此时返回的信息中能够发现大量的提示都指向:

debug1: identify file /Users/<ComputerName>/.ssh XXXXXX

基本上能够确定问题出现在本机的配置上。此时需要打开Finder,而后通过文件访问路径。

MacOS——Finder——【command+shift+G~/.ssh

找到known_hosts文件,将其清空,然后重新通过终端访问服务器主机。

3.3.2. known_hosts是什么

果然顺利解决了问题,但这个known_hosts是个啥引起了我的注意,于是去查了一下,这里连同ssh登录一并写下。

(1)远程主机收到本地机的登录请求后会将自己的公钥发给本地机;

(2)本地机使用这个公钥将密码加密后,发送回远程主机;

(3)远程主机用自己的私钥解密登录密码,如果密码正确,则同意登录。

从MacOS的终端首次通过ssh登录远程主机时,会提示:

The authenticity of <hostname>'XXX.XXX.XXX.XXX' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
Are you sure you want to continue connecting (yes/no)?

这里的意思是本地机无法确认远程主机的真实性,需要用户判断是否信任传来的RSA Key FingerPrint,键入yes后,接着就会提示:

Warning: Permanently added 'XXXX, XXX.XXX.XXX.XXX'(RSA)to the list of known hosts.

然后输入远程主机密码就可以正常登录了。

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

3.4. 修改默认DNS

默认DNS修改为114.114.114.114。修改方法参考文章,Mac终端显示192,不显示用户名的解决方法


文章作者: Pamarus
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Pamarus !
评论
  目录