*用户名* 的身份验证失败次数过多

*用户名* 的身份验证失败次数过多

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

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub [email protected]:.ssh/authorized_keys

我不断得到:

收到来自 111.222.33.44 的断开连接:2:用户名身份验证失败次数过多
rsync:连接意外关闭(迄今为止已接收 0 个字节)[发送方]
rsync 错误:io.c(601) 处出现无法解释的错误(代码 255)[发送方=3.0.7]

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

这真让我抓狂。我甚至在 Slicehost 自定义服务器上进行了设置,遇到的问题比这些人遇到的问题要少。

有什么建议吗?也许这是客户端的问题,而不是服务器端的问题。

答案1

这通常由于无意中提供了多个 ssh 密钥而导致给服务器。如果提供的密钥过多,服务器将拒绝任何密钥。

-v您可以通过在命令中添加标志来获取详细输出,亲自查看这一点ssh。您将看到提供了一堆密钥,直到服务器拒绝连接并说:“[用户] 的身份验证失败次数过多”。如果没有详细模式,您只会看到模棱两可的消息“对端重置连接”

为了防止提供不相关的密钥,您必须在~/.ssh/config文件(在客户端计算机上)的每个主机条目中明确指定这一点,方法是添加IdentitiesOnly如下内容:

Host www.somehost.com
  IdentityFile ~/.ssh/key_for_somehost_rsa
  IdentitiesOnly yes
  Port 22

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

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

ssh -i some_id_rsa -o 'IdentitiesOnly yes' them@there:/path/

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

或者

ssh -i some_id_rsa -o IdentitiesOnly=yes them@there:/path/

答案2

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

ssh -o PubkeyAuthentication=no [email protected]

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

参考

答案3

我也遇到了这个错误,发现发生此错误是因为服务器配置为接受最多 6 次尝试:

/etc/ssh/sshd_config
...
...
#MaxAuthTries 6

除了在文件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
  1. 这可能不是一个好办法,因为它会削弱你的 ssh 服务器,因为它现在会在给定的连接尝试中接受更多密钥。想想这里的暴力攻击媒介。

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

  3. 设置 IdentitiesOnly 的方法可能是解决此问题的首选方法!

答案4

如果您收到以下 SSH 错误:

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

如果您的 .ssh 目录中存储了五个或更多 DSA/RSA 身份文件(我的系统默认如此),并且命令行中未指定“-i”选项,则可能会发生这种情况。

ssh 客户端将首先尝试使用每个身份(私钥)登录,然后提示输入密码验证。但是,sshd 会在五次登录尝试失败后断开连接(默认值可能有所不同)。

如果您的 .ssh 目录中有多个私钥,您可以使用“-o”可选参数在命令行中禁用“公钥认证”。

例如:

$ ssh -o PubkeyAuthentication=no root@host

相关内容