我没有使用hosts.allowhosts.deny,而且SSH在我的Windows机器(同一台笔记本电脑,不同的硬盘驱动器)上工作,但在我的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'^#'的输出,其中将包含其他表(例如nat和mangle)。如果它们为空,则只需说明。上面的iptables输出默认情况下仅限于过滤器表。同样,在SSH服务器上,在这样的备用端口上运行SSH并提供调试输出。

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

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

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

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

#1 楼

最初发布于Ask Ubuntu

如果您排除了任何“外部”因素,则以下步骤通常可以缩小范围。因此,尽管这不能直接回答您的问题,但可以帮助您找出错误原因。
sshd进行故障排除


我发现通常在任何情况下都非常有用这种情况是在不让守护进程启动的情况下启动sshd。在我的情况下,问题是syslogauth.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-p 10222使sshd在该备用端口上侦听,从而覆盖了配置文件-这样就不会与可能在运行的sshd实例冲突。确保在此处选择一个空闲端口。

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

这种方法对我发现问题有很多次帮助,身份验证问题或其他类型。要获得对stdout的真正冗长的输出,请使用$(which sshd) -Ddddp 10222(请注意添加的dd可以增加详细程度)。有关更多调试方面的信息,请检查man sshd。此方法的主要优点是,它使您可以检查sshd的配置,而不必在默认端口上重新启动sshd。通常,这应该不会干扰现有的SSH连接,但是我已经看到了。因此,这可以使用户在(可能)切断对远程服务器的访问之前验证配置文件(例如,对于某些VPS甚至对于物理服务器,我都需要对其进行额外付费才能获得带外访问)到机器上。)

评论


我连接到错误的IP,但这使我顺利进行。.请注意,我的连接尝试均未显示在调试输出中。

–特克斯
2014年5月11日13:39

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

– Cuga
2015年2月17日在16:40

对于在OpenWRT上具有dropbear的反向SSH shell,可以是,dropbear实际上不是在正确的接口/本地主机上侦听。 ps | grep drop并相应地查找-p 或正确的IP和本地主机。使用netstat -nt查找活动的SSH连接,您可以在其中找到源IP /接口。

– AdamKalisz
20年7月8日在10:48

#2 楼

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

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

ssh_exchange_identification: read: Connection reset by peer


或:

Connection closed by aaa.bbb.ccc.ddd


取决于主机释放前的距离。

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

#3 楼

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

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

评论


如果sshd没有运行,则连接不会关闭而是被拒绝(尝试ssh -p someportwithoutsshd localhost)。

–安东
14-10-29在9:08



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

– txomon
14-10-29在14:17

愚蠢的我也不知道我没有任何sshd正在运行,请通过安装openssh-server进行修复

–布莱恩·埃斯特里托(Bryan Estrito)
18年5月3日在2:00

#4 楼

我发现此错误是由于超出了服务器的ssh会话所致。我发现主机试图连接并杀死了所有客户端的所有会话。清理所有会话后,该问题得以解决。

评论


你是怎么做到的?

–流产
2015年10月23日14:46

你是怎么做到的? ping ...

– knocte
16年7月25日在7:21

一种方法是使用who查找打开的会话并杀死用户进程。

– Flatron
17年5月22日在6:34

如何终止ssh会话:unix.stackexchange.com/questions/127571/…

– Tejas Kale
18年7月4日在11:14

#5 楼

我在一个循环中启动16个或更多ssh会话的脚本中遇到了ssh_exchange_identification: read: Connection reset by peer问题。 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


#6 楼

或者您可能做了昨晚所做的事情,并删除了/ 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 / empty→ls:无法访问“ / var / empty”:没有这样的文件或目录。因此,至少有一个发行版已完全消除了这一点。查看/etc/init.d/sshd脚本,似乎至少在Debian上,特权分离目录现在是/ var / run / sshd,如果尚不存在,则在启动时创建。

–roaima
17年9月9日在21:21



#7 楼

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

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

#8 楼

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

telnet x.x.x.x 22


(如果没有,则可以连接控制台电缆以登录)

以我为例,它无法正常工作,我连接了控制台电缆以登录。
登录后,我发现所有5条VTY线路都在忙主机(Cisco路由器)。

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

课程:

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

评论


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

– Jeff Schaller♦
17年3月3日在10:25

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

– Xalorous
17年5月5日在14:34

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

–丹·安德森(Dan Anderson)
19年7月26日在21:42



#9 楼

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

#10 楼

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

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

#11 楼

从连接后面的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),但也没有使用OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017的Debian Stretch过滤端口,这次我有了预期:


没有路由到主机


#12 楼

尝试与root用户一起使用ssh进入最近创建的容器时,我遇到类似的错误:

ssh root@localhost -p 8022  
  ssh_exchange_identification: Connection closed by remote host

# local port 8022 is redirected to container ssh port 22


显然,这是由于用户(我的情况下为“ root” )没有密码。

一旦添加用户密码,并重新启动sshd(在容器内部):

echo 'root:<PASSWORD>' | sudo chpasswd
sudo service ssh restart


然后可以将ssh放入容器中。

#13 楼

如果您所处的环境是中间硬件(例如一个堡垒)中继您的SSH,则可能是由于堡垒无法到达远程主机而挂断这一事实。他们自然不想显示此信息,而是让您尝试发现远程主机。