ssh_exchange_identification:连接被远程主机关闭(不使用hosts.deny)


74

没有使用hosts.allowhosts.deny,我的Windows机器(同一台笔记本电脑,不同的硬盘驱动器)上还有更多的SSH可以工作,但我的Linux机器却没有。

ssh -vvv root@host -p port 给出:

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

在Windows机器上,一切正常,因此我检查了安全日志,并且其中的行是相同的,服务器将两个不同的“机器”视为相同,并且都通过公共密钥身份验证允许。

因此得出结论,这肯定是我本地的ArchLinux笔记本电脑存在问题。但是什么呢?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

所以那不是问题。

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

与防火墙设置没有冲突(目前)。

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

权限似乎很好(服务器上相同)。也尝试了不进行配置/etc/ssh/ssh_config而导致结果相同的情况,只是客户端中进行了许多自动配置,最终导致了相同的错误。


请提供的输出iptables-save|grep -v '^#',其中将包含其他表(例如natmangle)。如果它们为空,则只需声明。你iptables上面的输出默认情况下仅限于filter表。此外,在其它端口上的SSH服务器运行SSH 这样,给调试输出。
0xC0000022L 2014年

@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609dgist.github.com/Torxed/1fd9b5b0c276629caf30,关于防火墙,SSH适用于我的Windows驱动器(同样是笔记本电脑ergo mac和IP),但不适用于我的linux磁盘。
2014年

还有两件事。您需要在备用端口上连接到实例。否则,您将看不到可能的问题。关于Windows与Linux的事情,其中​​之一是使用IPv6的ip6tables-save吗?
0xC0000022L 2014年

@ 0xC0000022L非常抱歉。我连接到错误的IP。在端口8080上运行SSH的原因,这是为什么我连接到在端口8080上运行Web缓存的主机时收到此问题的原因> _ <
修复了

1
当我的服务器被试图强行使用sshd的随机攻击者击中时,这断断续续地发生在我身上。通过添加防火墙规则以断开与攻击者的连接来解决。
Andrew Hows 2014年

Answers:


60

如果您排除了任何“外部”因素,则以下步骤通常有助于缩小范围。因此,虽然这不能直接回答您的问题,但可能有助于跟踪错误原因。

故障排除 sshd

在任何这种情况下,我发现通常非常有用的是开始时sshd不要使其守护进程。在我的情况下,问题在于既syslog没有auth.log显示出任何意义。

从终端启动时,我得到:

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

好多了!此错误消息使我能够查看问题所在并进行修复。两个日志文件都不包含此输出。

注意:至少在Ubuntu上,这$(which sshd)是满足sshd绝对路径要求的最佳方法。否则,您将收到以下错误:sshd re-exec requires execution with an absolute path。make -p 10222sshd监听该备用端口,从而覆盖配置文件-这样就不会与可能正在运行的sshd实例发生冲突。确保在此处选择一个空闲端口。

最后:连接到备用端口(ssh -p 10222 user@server)。

这种方法已经帮助我很多次寻找问题,无论是身份验证问题还是其他类型。要获得真正冗长的输出stdout,请使用$(which sshd) -Ddddp 10222(请注意添加dd以增加冗长程度)。有关更多调试的信息,请检查man sshd


我连接到错误的IP,但是这让我去..指出,没有任何我的连接尝试在调试输出出现了..
Torxed

2
$(哪个sshd)-Ddp 10222让我终于知道是什么导致了我的问题。谢谢一群!
Cuga 2015年

9

您还可以拥有一个主机,该主机的内存碎片非常严重,以致于无法为页面分配连续的内存来分派托管SSH会话的过程。

在这种情况下,您会收到以下消息之一:

ssh_exchange_identification: read: Connection reset by peer

要么:

Connection closed by aaa.bbb.ccc.ddd

取决于主机在摆脱困境之前到达的距离。

如果明显的原因是内存碎片,则解决方案是通过其他方式访问服务器并重新启动某些相关服务。我发现Apache和MySQL是VM的罪魁祸首,因为VM没有交换分区。失败的话,重启主机。


6

以防万一,因为这发生在我身上。确保您已在主机中运行sshd!

这是一个愚蠢的失败,但实际上可能是您的问题。


10
如果sshd未运行,则不会关闭连接,但会拒绝连接(尝试ssh -p someportwithoutsshd localhost)。
Anthon 2014年

4
好吧,我的情况不是直接的联系。我创建了一个到非监听计算机的反向隧道,这是ssh客户端连接中的输出。
txomon 2014年

1
愚蠢的我也不知道,我没有任何的sshd运行,通过安装OpenSSH服务器固定它
布莱恩Estrito


4

ssh_exchange_identification: read: Connection reset by peer在一个循环中启动16个或更多ssh会话的脚本中遇到了这个问题。sshd显然跟不上;增加短暂的睡眠可以解决我的问题:

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done

3

或者,您可能昨晚做了我所做的事情,并删除了/ var / empty。显然,目录及其权限对于sshd的功能至关重要,并且在重新启动时不会重新创建目录 /etc/init.d/sshd将无法重新启动,并且systemd不会告诉您原因。

我通过在前台运行sshd找到了问题:

# /usr/sbin/sshd -Dd
  Missing privilege separation directory: /var/empty/sshd

重建目录解决了我的问题:

drwxr-xr-x. root root  /var/empty
drwx--x--x. root root  /var/empty/sshd

致Linux程序员的注意事项:在/var/empty……中至关重要的东西真的吗???


ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory。因此,至少有一个发行版完全消除了这一点。看一下/etc/init.d/sshd脚本,似乎至少在Debian上,特权分离目录现在/var/run/sshd已经存在,如果尚不存在,则会在启动时创建。
roaima

1

ssh_exchange_identification: Connection closed by remote host尝试连接SSH时收到错误消息:我对本地计算机的SSH端口22进行了远程端口转发,因此可以从Internet上的远程服务器临时访问它。

实际上,仅显示错误是因为我不记得我在启动时禁用了SSH服务,因此不得不在本地计算机上启动SSH服务sudo service ssh start


1
谢谢,您救了我的命。
Al Kasih

0

首先第一件事;telnet到主机IP地址以验证端口22是否实际上在该主机上监听(打开):

telnet x.x.x.x 22

(否则,您可以连接控制台电缆以登录)

就我而言,它不起作用,我连接了控制台电缆以登录。登录后,我发现该主机(Cisco路由器)上的所有5条VTY线路都忙。

我清除了挂在那儿的旧连接以释放VTY线路,它起作用了。我在VTY行下添加了命令“ exec-timeout 15”。然后,我卸下了控制台电缆。

课:

确保在所有设备上设置5-10分钟的超时时间(如果未检测到任何活动)。


2
在这种情况下,您将得到“连接被拒绝”,就像暗示的另一个答案一样,而不是“连接建立”,然后是“对等方重置连接”
Jeff Schaller

1
使telnet可用(守护程序监听telnet)是一个非常严重的安全漏洞,该漏洞是ssh是首选的远程控制台的主要原因。
Xalorous

使用telnet客户端在端口22上探测ssh守护程序不是安全缺陷。使用telnet客户端在端口23连接到telnet守护程序是一个安全漏洞。
Dan Anderson

0

我的情况是错误地设置了套接字代理(不起作用)。我得到了完全相同的ssh -vvv输出和空的sshd日志。


0

该错误ssh_exchange_identification: Connection closed by remote host可能由于某些未知原因而发生。当我使用Visual Studio代码时。当我尝试使用git pull命令从远程回购中拉出时,发生了相同的错误。

我只是关闭了嵌入式终端,然后打开了 Ubuntu的终端,然后再次拉动。它成功了


0

CentOS Linux release 7.4.1708 (Core)OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017后面的连接不过滤口我有:

ssh_exchange_identification:连接被远程主机关闭

原来我的Raspberry Pi关机了!

我以为没有打开电源的主机会产生错误“没有路由到主机”。Raspberry Pi在我的ISP路由器后面,因此可能是因为它关闭了连接。

然后,我从另一个互联网连接重复了实验(尝试连接到已关闭电源的Raspberry Pi),但也没有使用Debian Stretch过滤端口,OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017这一次,我的期望值是:

没有到主机的路由

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.