![SSH 连接:ssh_exchange_identifcation](https://linux22.com/image/1390487/SSH%20%E8%BF%9E%E6%8E%A5%EF%BC%9Assh_exchange_identifcation.png)
我已经通过 Mac 连接远程服务器大约一个月了。不过最近我尝试使用 ssh dylan@MY_IP 进行连接,结果收到此消息。
ssh_exchange_identification: read: Connection reset by peer
我还得到了一些诊断信息...
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to {MY IP{ [MY IP] port 22.
debug1: Connection established.
debug1: identity file /Users/watson/.ssh/id_rsa type -1
debug1: identity file /Users/watson/.ssh/id_rsa-cert type -1
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/watson/.ssh/id_dsa" as a RSA1 public key
debug1: identity file /Users/watson/.ssh/id_dsa type 2
debug1: identity file /Users/watson/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
经过一些研究后,我尝试了以下方法......
- 重启了我的路由器
- 清除我的“known_hosts”文件
- 删除了我的“known_hosts”文件
- 释放并续订我的 DHCP
- 我也尝试过从另一台设备(Windows)使用 Putty,但同样出现错误
请注意,我没有对服务器进行任何更改来抑制这种通信。
另外,我不确定这是否会导致问题,但我已经通过它的域名和 IP 连接到它。
此外,我能够从另一个 IP 地址成功连接。
我知道这是一个大问题,有很多资源可以解决,但很多解决方案都没有用,我也没有真正看到任何人提供任何类型的解决方案。
更新
我强制将其改为协议 1。现在我得到的不是“对等端重置连接”,而是“远程主机关闭连接”。运行它并显示调试信息:
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to MY_IP [MY_IP] port 22.
debug1: Connection established.
debug1: identity file /Users/watson/.ssh/identity type -1
debug1: identity file /Users/watson/.ssh/identity-cert type -1
ssh_exchange_identification: Connection closed by remote host
答案1
这就是我解决连接到 SSH 服务器时出现“ssh_exchange_identification:远程主机关闭连接”错误的方法。
在将软件包解压到 root 后,尝试连接到嵌入式 Linux 机器时出现此错误。许多库文件被替换,包括 libssl。
正在尝试连接:
chetic@ubuntu:~$ ssh -v [email protected]
OpenSSH_6.2p2 Ubuntu-6ubuntu0.3, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to SC [192.168.1.100] port 22.
debug1: Connection established.
debug1: identity file /home/delaval/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/delaval/.ssh/id_rsa-cert type -1
debug1: identity file /home/delaval/.ssh/id_dsa type -1
debug1: identity file /home/delaval/.ssh/id_dsa-cert type -1
debug1: identity file /home/delaval/.ssh/id_ecdsa type -1
debug1: identity file /home/delaval/.ssh/id_ecdsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2p2 Ubuntu-6ubuntu0.3
ssh_exchange_identification: read: Connection reset by peer
谷歌搜索似乎只建议检查 hosts.deny 和 hosts.allow,但我的目标机器没有这样的文件。
重启后(按照 Karthik 的建议),sshd 没有运行。我尝试在目标上手动启动 sshd:
# sshd
OpenSSL version mismatch. Built against 1000002f, you have 1000105f
我用原始版本替换了 /usr/lib/libssl.a,然后启动了 sshd,一切恢复正常。就我而言,问题是由我最初解压到 root 的软件包中的版本不正确引起的。
答案2
我得到了同样的错误(但来自任何机器,包括通过有问题的机器ssh localhost
)。
它始于我迁移用户配置文件时;即以 root 身份复制文件后,然后执行如下命令chown -R username /Users/username/Destop
无论如何,完全不确定为什么 /var/empty 所有者被更改为用户名,但ssh
肯定需要/var/empty
由 root 拥有(否则你会得到ssh_exchange_identification: read: Connection reset by peer
):
sudo chown root /var/empty
答案3
这不是你本地机器的问题,而是服务器端的问题。可能多种因素导致这个问题:
- 远程服务器上的 /etc/hosts.allow 或 /etc/hosts.deny 配置发生变化。
- 服务器负载过重。
过去,当我遇到这些问题时,我会按照以下顺序做以下两件事之一:
- 按照上述文章中的方法修改 /etc/hosts.allow。(并重新启动 SSH 服务器)
- 如果 /etc/hosts.allow 已经符合要求,只需重新启动 SSH 服务器(执行此操作时要小心!)
- 如果重启不起作用,请重新生成服务器密钥并重启 SSH 服务器(这很危险,因为每个登录这台机器的用户都会收到有关服务器密钥已更改的错误)
通常情况下,1 可以解决问题,但在某些情况下,我不得不做 2。我还没能弄清楚为什么确实如此,只是它起作用了。也许这与密钥的呈现方式有关,或者它在某种程度上被破坏了——我不确定。但我知道的是,错误完全与服务器有关,以及设置 SSH 连接时握手的方式。
答案4
这肯定是一个错误,ssh 在我的其中一台机器上有效,但在另一台机器上无效。我解决了这个问题,请按照以下步骤操作。
- 生成一个永不过期的访问令牌,并选择所有可用的选项。
- 删除现有的 SSH 密钥。
- 使用 https 而不是 ssh 克隆 repo。
- 使用用户名但使用生成的访问令牌而不是密码。
或者,您可以在现有 repo 中使用此命令将远程设置为 http,然后使用此命令 git remote set-url originhttps://gitlab.com/[用户名]/[repo 名称].git