如何从“用户根身份验证失败太多”中恢复


64

我已经做了几次尝试使用腻子终端为root @ host用户建立SSH连接。这样做时,我多次指定了错误的凭据,然后正确地指定了它们,然后在凭据被接受之后,ssh会话中断

“服务器意外关闭网络连接”。

该错误由腻子终端报告。尝试从本地控制台ssh root @ localhost时-它可以正常工作。当我从其他主机SSH otheruser @ host时,它也可以正常工作。因此,网络连接问题无罪。我想到的唯一错误是:“对于root用户,身份验证失败太多”,尽管putty报告了另一个错误。

问题是:如何从这种错误情况中恢复并让腻子再次登录?重新启动sshd似乎无济于事



1
如果Too many Authentication Failures在完全登录之前遇到错误,请确保禁用ssh代理(例如Windows上的选页器)。
马恩

Answers:


8

您确定允许root登录ssh吗?

检查sshd_config并验证是否允许root登录。如果设置更改,则需要重新启动sshd。


120

“用户root的身份验证失败太多”表示已超过 SSH服务器的MaxAuthTries限制。发生这种情况是为了使您的客户端尝试使用/home/USER/.ssh/中存储的所有可能的密钥进行身份验证。

这种情况可以通过以下方式解决:

  1. ssh -i / path / to / id_rsa root @ host
  2. /home/USER/.ssh/config中指定Host / IdentityFile对。
    • Host host
    • IdentityFile /home/USER/.ssh/id_rsa
    • Host host2
    • IdentityFile /home/USER/.ssh/id_rsa2
  3. / etc / ssh / sshd_config中增加SSH服务器上的MaxAuthTries值(不推荐)。

9
这确实应该是公认的答案!
本杰明2014年

4
要获得可接受的答案,答案实际上必须与问题中提到的软件有关。=)
rakslice 2015年

4
超出限制的另一个原因可能是您的ssh代理。ssh -vv显示了正在尝试的两个密钥的多个版本(由ssh-agent提供)。我认为这是由于我不经常重新启动并替换了一些已过期的密钥所致。显然ssh-agent不会用新密钥覆盖旧密钥。我杀死了ssh-agent,问题就消失了。
标记

增加会带来什么弊端MaxAuthTries?我怀疑许多攻击是通过尝试许多不同的密钥来进行的。此外,如果攻击者想要这样做,他们只要关闭连接并在每次达到极限时打开一个新连接即可。无论如何,他们不会成功地强行使用密钥。
kasperd

@Mark谢谢!重新启动ssh-agent对我来说已经解决了!
winduptoy

90

如果出现以下SSH错误:

$ Received disconnect from host: 2: Too many authentication failures for root

如果您的.ssh目录中存储了五个或更多DSA / RSA标识文件(在我的系统上为默认值),则可能会发生这种情况。在这种情况下,如果-i未在命令行上指定选项,则ssh客户端将首先尝试使用每个身份(私钥)和下一个提示进行密码身份验证的方式登录。但是,sshd会在五次错误的登录尝试后断开连接(再次默认情况下可能会有所不同)。

因此,如果您的.ssh目录中有许多私钥,则可以Public Key Authentication在命令行使用-o可选参数禁用它。

例如:

$ ssh -o PubkeyAuthentication=no root@host

1
非常感谢!在此处使用只能通过SSH访问的Ubuntu Server。在盲目地关注互联网上的教程后,我已经设置了“ MaxAuthTries 1”。
安德烈·菲格雷多

你才救了我的命!不使用密钥身份验证,因此其他答案无济于事。这很容易解决!!
乔治·格林

5
这是的答案
smac89

我只是使用密码身份验证再次在密钥上进行了复制,现在每次都可以使用。我的.ssh目录中有很多密钥,我认为这并不重要。
肯·夏普

这是最相关的答案,并且实际上应该是ssh-copy-id的默认行为,因此,如果我想将ID复制到服务器上,通常就不存在。但是,如果ssh首先尝试使用pubkey对服务器进行身份验证,则服务器将中止连接,然后才能输入密码。
Sprinterfreak

17

在远程计算机上,打开/ etc / sshd_config并更改值

MaxAuthTries 30

当您已安装多个密钥或打开多个连接时,这是典型的问题。服务器会逐步检查每个密钥,如果MaxAuthTries设置为3,则在第3次尝试后将断开您的连接。典型的SSH安全性。

我建议您在连接到远程计算机的过程中使用详细模式来分析问题。

ssh -v -p port_number用户名@服务器名

像这个论坛上的大多数人一样,猜测是错误的,而且浪费时间。首先尝试分析问题,收集信息然后询问。

玩得开心。


在我的特定情况下,问题是我已通过代理转发登录,试图运行使用其自身的SSH身份的脚本。当我使用代理转发来运行它时,在尝试使用它自己之前,存在太多身份。因此,我设置了脚本以丢弃代理环境,然后将其清除。我也可以增加MaxAuthTries,但是在这种情况下我不需要这样做。
肖恩·赖夫施奈德

1
谢谢。 -v显示了我的ssh客户端尝试使用多个密钥(我现在有很多)。我用ssh-add -D
joeytwiddle

12

这是不好的做法。只需在远程机器上有一个普通用户并使用它通过ssh进行连接,然后使用su / sudo获得root用户访问权限。


10

对我来说,此问题是通过为要连接的主机创建以下ssh_config解决的。

(〜/ .ssh / config)

Host example
HostName example.com
User admin
IdentityFile ~/path/to/ssh_key_rsa
IdentitiesOnly=yes

发生问题是因为我的~/.ssh文件夹中的ssh键太多,例如16个左右。而且在配置中没有这两个IdentityFileAND IdentitiesOnly指令的情况下,我的机器显然~/.ssh在尝试正确的IdentityFile之前尝试了所有键并达到最大尝试次数。


6

我建议您,正如上述Anon所说,请使用另一个用户来获得ssh访问,然后使用su命令来获得root访问权限。

另外,还要确保启用PermitRootLogin了在/etc/ssh/sshd_config服务器上的文件。


5

我也面临同样的问题。如果您正在使用Pageant并将大量密钥装入其中,则很容易发生这种情况,因为这些服务器将每个公开密钥的提供都计为一次身份验证尝试。

(此建议从此处获取。)


1
由于链接腐烂,答案变得毫无用处,因此我们不太热衷于此处仅链接的答案。一定要保留链接,但是如果您可以在一两段中总结解决方案,那么您很可能会在这里提出自己的答案。
MadHatter

2
希望您能原谅我的后续修改;现在(我希望)已经很清楚地表明,您所指的建议就是您所提供的建议,但仍归功于原始信息。从我+1努力改善您的答案!
MadHatter

我在Putty中也遇到“身份验证失败太多”的问题。从PageAnt删除所有其他键之后,终于成功登录了。
klor

4

我通过运行以下命令在系统中解决了此问题:

eval $(ssh-agent)
ssh-add  ~/.ssh/keyname

然后在远程机器上尝试ssh


3

要暂时解决此问题,直到可以完全解决其他地方提到的问题为止,可以重置用户的PAM提示,以便他们可以重试:

pam_tally --reset --user <USERNAME>
pam_tally2 --reset --user <USERNAME>

2

我被类似的问题咬了。但是,真正的原因是我ForwardAgent yes在管道上的机器的配置文件中。我正在从机器A连接到机器B,再连接到机器C。

从B-> C的ssh尝试中显示了错误消息,但这是由A激活了转发引起的。因此,首先为C提供了A的所有密钥,然后才为其提供B的所有密钥。

当我再向A添加一个键时,它突然出现。


1

我通过以下方式在Mac上解决了此问题:

  1. 用“ sudo passwd root”设置root密码,然后
  2. 使用“ nano / etc / ssh_config”编辑并保存ssh配置文件
  3. 将RSAAuthentication更改为“ no”而不是。

0

好的,所以就我而言,这很奇怪,就在这里...

我有一个带有SSH密钥的标准无业游民的VM,可以使用Putty SSH进入它。尝试在PHPStorm部署期间进行此操作时,too many authentication failures出现错误。所以我增加了MaxAuthTries我的筹码sshd_config,然后被Auth failed错误击中Auth cancel

现在,我不知道为什么我什至尝试这样做,但是...我在PHPStorm的部署窗口中的SSH密钥路径的末尾添加了点。就像这样:

C:\Users\Deadpool\\.ssh\chimichanga

现在是这样的:

C:\Users\Deadpool\\.ssh\chimichanga.

它的工作原理是:在我的“ .ssh”文件夹中,我有更多文件:

chimichanga - copy of "id_rsa" from vagrant machine
chimichanga.ppk
chimichanga.pub

我不确定那个骗人的点是做什么的,但是使用该.ppk文件不起作用,所以我想这有点神奇;)哦,在那个“点把戏”之后,我可以摆脱MaxAuthTries了。


0

其他答案告诉您以root身份建立连接的最佳方法及其安全含义,但是您的显式问题是

如何从此错误情况中恢复并让腻子再次登录?

您上次提到连接时,远程服务器断开了连接。

我认为您可能会发现,远程服务器正在运行fail2ban(*),并且在成功登录后将其IP“锁定”。您可以通过尝试再次登录进行测试,甚至不会收到登录提示。

有两种解决方案,您可以等待入狱时间,此时情况可以简单地恢复正常,但是入狱时间可以是任何事情。或者,您可以找到另一台要登录的计算机,然后执行此操作,然后“解除锁定”您的IP,在这种情况下,“不同”是从远程服务器的角度来看的,因此位于同一防火墙后面的另一台计算机可能也无法工作。

(*)fail2ban是一个超级方便的守护程序,可以在检查到来自客户端的潜在恶意行为时,定期检查各种日志文件并调整防火墙规则,以使服务器“消失”。在debian上,它开箱即用,配置为检测来自特定IP的多个ssh登录失败,并且在3(我认为)之后,它将丢弃来自该IP的所有数据包。出色地制止了这些脚本化的蛮力攻击。


0

正如@sufferer在另一个答案中提到的那样,某些Linux发行版中包括监视器,以防止对外部可见服务(例如SSH DenyHosts或SSH)的暴力攻击fail2ban。这些监视器检查日志文件以查找失败的尝试,并添加过滤器以阻止发生过多故障的IP地址(该数目是可配置的,并且与sshd配置无关)。

如果您的发行版包括fail2ban,可以保护向iptables防火墙添加规则的服务,则可以使用以下命令检查受监管的服务或“监狱”:

sudo fail2ban-client status

SSH服务的监狱是sshd,因此要检查是否存在被禁止的IP,可以使用:

sudo fail2ban-client status sshd

并取消某些IP abcd的权限:

sudo fail2ban-client set sshd unbanip a.b.c.d

如果有DenyHosts,则禁止的列表位于文件/etc/hosts.deny;中。您可以直接以root用户身份编辑此文件。要授予某些IP abcd永久访问权限,可以将该行添加sshd:a.b.c.d到文件/etc/hosts.allow中。

和往常一样,该man命令是您的朋友:

man fail2ban
man hosts.deny

应该存在其他类似的实用程序,但我只使用过这些。

请注意,增加sshd配置中允许的重试次数不会释放被禁的IP,而只会允许同一连接中出现更多故障。如果超过了允许的数量,则用户/攻击者只需重新连接一次即可尝试n次。

其他服务集成了禁令列表(如Rajnesh Thakur关于重启VNC服务器的回答所示)。


-2

我通过Ubuntu 16.04服务器上的两个简单步骤解决了这个问题-

首先停止我的vnc服务器或终止进程-

vncserver -kill :1

然后重新启动-

vncserver

之后,从远程桌面客户端连接它-

192.0.2.99:5901

做完了!


这与问题无关。
肯·夏普


-4

我遇到了一个相同的问题,我不断收到“ SServer发送了断开连接的消息类型2(协议错误):用户的身份验证失败太多”

我通过删除所有ssh(.ppk密钥)并登录到AD集成服务器来解决了此问题。


此答案没有用,建议删除.ppk文件很危险。拜托大家,如果您认为需要删除.ppk文件(我想不出您想要的好理由),请将其重命名为其他名称,不要删除它们。它们包含您可能需要的密钥。
Law17年
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.