如何从“用户 root 的身份验证失败过多”中恢复

use*_*722 87 ssh putty

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

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

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

问题是:如何从这种错误状态中恢复并让 putty 再次登录?重新启动 sshd 似乎没有帮助

小智 147

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

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

  1. ssh -i /path/to/id_rsa root@host
  2. /home/USER/.ssh/config 中指定Host/IdentityFile

配置文件中的单个主机应如下所示:

Host example.com
  IdentityFile /home/USER/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

您还可以设置用户,这样您就不需要在命令行中输入它并缩短长 FQDN,请参见此示例:

host short
  IdentityFile /home/USER/.ssh/id_rsa
  User someuser
  HostName really-long-domain.example.com
Run Code Online (Sandbox Code Playgroud)

然后,您使用以下命令连接到真正的长域.example.com 服务器:

ssh short
Run Code Online (Sandbox Code Playgroud)

注意:如果你选择只使用第二个选项,并尝试使用 ssh example.com 你仍然会得到错误(如果那是什么把你带到这里),简短的版本不会给出错误,你也可以同时使用选项,以便您可以 ssh anyuser@example.com 而不会出现错误。

  1. 增加/etc/ssh/sshd_config 中SSH 服务器上的MaxAuthTries值(不推荐)。

  • 这应该是公认的答案! (17认同)
  • 要成为公认的答案,答案实际上必须与问题中提到的软件有关。=) (4认同)
  • 超出限制的另一个原因可能是您的 ssh 代理。`ssh -vv` 显示正在尝试的两个密钥(由 ssh-agent 提供)的多个版本。我认为这是由于我很少重新启动并且更换了一些过期的密钥;显然 ssh-agent 不会用新密钥覆盖旧密钥。我杀死了 ssh-agent,问题就消失了。 (4认同)
  • 我会将#2 与将所有(或大部分)ssh 密钥移动到一个单独的目录结合起来,比如`~/.ssh/keys`。如果没有给出特定的密钥(通过 `-i` 选项或 `config` 文件),ssh 甚至会在尝试提供密码提示之前尝试来自 `~/.ssh` 的所有密钥。如果您有很多 ssh 密钥,这意味着您永远不会在新服务器上看到密码提示。 (2认同)

小智 130

如果您收到以下 SSH 错误:

$ Received disconnect from host: 2: Too many authentication failures for root
Run Code Online (Sandbox Code Playgroud)

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

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

例如:

$ ssh -o PubkeyAuthentication=no root@host
Run Code Online (Sandbox Code Playgroud)

  • 这是**的**答案 (9认同)
  • 非常感谢!在这里使用 Ubuntu Server,我只能通过 SSH 访问。在盲目地遵循互联网上的教程后,我设置了“MaxAuthTries 1”。 (2认同)

小智 21

在远程机器上打开 /etc/sshd_config 并更改值

MaxAuthTries 30

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

我建议您在连接到远程机器时使用详细模式来分析问题。

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

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

玩得开心。

  • 谢谢。`-v` 显示我的 ssh 客户端尝试使用多个密钥(我现在有很多)。我用`ssh-add -D`从代理中清除了它们 (2认同)

Nin*_*xor 19

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

(~/.ssh/config)

Host example
HostName example.com
User admin
IdentityFile ~/path/to/ssh_key_rsa
IdentitiesOnly=yes
Run Code Online (Sandbox Code Playgroud)

出现问题是因为我的~/.ssh文件夹中有太多 ssh 密钥,比如 16 个左右。如果配置中没有这两个IdentityFileANDIdentitiesOnly指令,我的机器显然~/.ssh在尝试正确的 IdentityFile 之前尝试输入所有密钥并达到最大尝试次数。

  • 我的配置中有大约 30 个键,这在新的小型设备上导致了这个 OP 错误。我添加了“IdentitiesOnly=yes”并连接。我每天都学到新东西... (2认同)

Ano*_*ous 13

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

  • 确实,很好的建议,但不是问题的答案。 (3认同)

小智 11

您确定允许 root 登录到 ssh 吗?

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


小智 8

要暂时解决这个问题,直到事情可以如其他地方所述完全解决,您可以重置用户的 PAM 计数,以便他们可以重试:

pam_tally --reset --user <USERNAME>
pam_tally2 --reset --user <USERNAME>
Run Code Online (Sandbox Code Playgroud)


Rod*_*t43 6

我会建议您,如 Anon 上面发布的,使用另一个用户获得 ssh 访问权限,然后使用该su命令获得root访问权限。

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


小智 6

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

eval $(ssh-agent)
ssh-add  ~/.ssh/keyname
Run Code Online (Sandbox Code Playgroud)

然后在远程机器上尝试 ssh


Pra*_*tta 6

我也面临同样的问题。如果您使用Pageant加载大量密钥,这很容易发生,因为这些服务器将每次提供的公钥视为一次身份验证尝试。

(此建议取自此处。)

  • 我们不太热衷于此处仅提供链接的答案,因为链接已失效,答案变得毫无用处。一定要保留链接,但是如果您可以用一两段来总结解决方案,那么您很可能会在此处获得一个可以投票的答案。 (2认同)
  • 我希望你能原谅我随后的编辑;现在(我希望)它清楚地表明您所指的建议是您给出的建议,但仍然归功于原始来源。我的 +1 努力改进您的答案! (2认同)