*用户名*的身份验证失败太多

Gab*_*lla 284 ssh authentication

我有一个启用了 ssh 访问的 hostgator 帐户。尝试使用以下命令上传生成的 .pub 密钥文件时:

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub username@111.222.33.44:.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

我不断得到:

从 111.222.33.44 收到断开连接:2:用户名身份验证失败太多
rsync:连接意外关闭(到目前为止已收到 0 个字节)[发送方]
rsync 错误:io.c(601) [sender=3.0.7] 处的无法解释的错误(代码 255)

我之前一直在玩 ssh,直到我遇到身份验证失败。但是现在似乎身份验证失败计数器没有重置(现在已经等了 12 多个小时,技术支持“假设”它在 30 分钟到 1 小时后重置,另一个人告诉我“每次尝试登录时它都会重置用户名”,jeesh)。

这让我发疯。我什至在 Slicehost 自定义服务器中设置了这个,并且比这些人遇到的问题更少。

有小费吗?也许这是客户端而不是服务器端的东西。

Joh*_*n T 453

这通常是由于无意中向服务器提供了多个 ssh 密钥造成的。提供太多密钥后,服务器将拒绝任何密钥。

您可以通过将-v标志添加到您的ssh命令中来获得详细输出,从而亲眼看到这一点。您将看到提供了一堆密钥,直到服务器拒绝连接说:“[用户] 的身份验证失败太多”。如果没有详细模式,您将只会看到不明确的消息"Connection reset by peer"

为了防止提供不相关的密钥,您必须在~/.ssh/config(在客户端机器上)文件中的每个主机条目中明确指定它,如下添加IdentitiesOnly

Host www.somehost.com
  IdentityFile ~/.ssh/key_for_somehost_rsa
  IdentitiesOnly yes
  Port 22
Run Code Online (Sandbox Code Playgroud)

如果您使用 ssh-agent,它有助于运行ssh-add -D以清除身份。

如果您没有使用任何 ssh 主机配置,则必须在ssh命令中明确指定正确的密钥,如下所示:

ssh -i some_id_rsa -o 'IdentitiesOnly yes' them@there:/path/
Run Code Online (Sandbox Code Playgroud)

注意:'IdentitiesOnly yes' 参数需要在引号之间。

或者

ssh -i some_id_rsa -o IdentitiesOnly=yes them@there:/path/
Run Code Online (Sandbox Code Playgroud)

  • 我不清楚把这条线放在哪里。在我尝试登录的服务器上,.ssh/config 仅包含其他服务器的信息。你的意思是这应该放在我试图 ssh 的计算机上的 .ssh/config 文件中吗?如果是这样,这还不清楚,因为您的回答是“一旦您重新登录......” (5认同)
  • 问题仍然存在:即使主机规则具有明确的“IdentityFile /path/to/private_key_file”设置,为什么“ssh”“提供多个密钥”(“~/.ssh”下的任何内容)。这个明确指定的密钥不应该(至少)首先提供吗?这不是 openssh 客户端中的错误/错误功能吗? (4认同)
  • 我必须将选项放在双引号中,如下所示:`ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/` (2认同)
  • 但它不应该使用由 `IdentityFile` 选项指定的密钥吗?例如,如果没有 `IdentitiesOnly` 选项,当我尝试 `ssh gitlab.com` 时,它会尝试使用我的 `github` 密钥。这没有道理。 (2认同)

小智 214

我找到了一种更简单的方法来做到这一点(如果使用密码身份验证):

ssh -o PubkeyAuthentication=no username@hostname.com
Run Code Online (Sandbox Code Playgroud)

这会强制进行非密钥身份验证。我能够立即登录。

参考

  • +1,希望我能给你更多。Raspberry Pi 是我唯一没有公钥的设备。得到:“pi 的身份验证失败太多” (3认同)
  • 您还可以创建别名以加快密码验证速度。别名 sshp='ssh -o PubkeyAuthentication=no ' (2认同)

slm*_*slm 29

我也收到此错误,发现它发生在 b/c 服务器配置为最多接受 6 次尝试:

/etc/ssh/sshd_config
...
...
#MaxAuthTries 6
Run Code Online (Sandbox Code Playgroud)

除了IdentitiesOnly yes~/.ssh/config文件中设置 ,您还有其他几个选项。

  1. 增加MaxAuthTries(在ssh服务器上)
  2. 删除您在~/.ssh/目录中存在的一些密钥对并运行ssh-add -D
  3. 将密钥显式链接到~/.ssh/config文件中的给定主机

像这样:

host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
Run Code Online (Sandbox Code Playgroud)
  1. 可能不是一个好方法,因为它会稍微削弱您的 ssh 服务器,因为它现在会在给定的连接尝试中接受更多的密钥。想想这里的蛮力攻击向量。

  2. 假设您拥有不需要且可以永久删除的密钥,这是一个好方法。

  3. 而设置 IdentitiesOnly 的方法可能是处理这个问题的首选方法!

  • 就我而言,只需在我的机器上运行 `ssh-add -D` 就可以了。谢谢! (2认同)

小智 8

我添加到 ~/.ssh/config 这个:

Host *
IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

它默认启用选项 IdentitiesOnly=yes。如果您需要使用私钥连接,您应该使用选项 -i 指定它


小智 6

如果您收到以下 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 目录中有许多私钥,您可以使用“-o”可选参数在命令行中禁用“公钥身份验证”。

例如:

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


小智 6

如果您有密码,并且只想使用密码登录,请按以下步骤操作。

要仅使用密码身份验证而不使用公钥,并且不使用有些误导的“键盘交互”(这是一个包含密码的超集),您可以从命令行执行此操作:

ssh -o PreferredAuthentications=password user@example.com
Run Code Online (Sandbox Code Playgroud)