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


255

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

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub username@111.222.33.44:.ssh/authorized_keys

我不断得到:

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

我以前一直在使用ssh玩弄,直到获得身份验证失败。但是现在看来auth失败计数器没有重置(现在等待超过12个小时,技术支持“假设”它在30分钟到1小时后重置,另一个人告诉我“每次您尝试登录时重置用户名”,jeesh)。

这让我发疯。我什至在一个Slicehost自定义服务器中进行了设置,并且与这些人相比,出现的问题更少。

有小费吗?也许是客户端而非服务器端。


就我而言,生成密钥是一个错误。我生成了一个密钥,却错过了源地址,并在密钥末尾使用了用户名。
记者

Answers:


415

这通常是由于无意中向服务器提供了多个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/

5
我不清楚这条线在哪里。在我尝试登录的服务器上,.ssh / config仅包含其他服务器的信息。您是说这应该放在我要从ssh发送的计算机上的.ssh / config文件中吗?如果是这样,目前还不清楚,因为您的回答是“一旦您重新登录……”
David LeBauer 2012年

2
我必须将选项用双引号引起来,例如:ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/
knb

1
Windows用户运行PAGENT(Putty代理)时,请检查以确保仅加载了需要加载的密钥。意外加载我的所有私钥后,我遇到了这个问题。
克里斯·拉斯科

2
问题仍然存在:即使主机规则有明确的设置,为什么也要ssh“提供多个键”(下的任何内容~/.sshIdentityFile /path/to/private_key_file。难道不应该(至少)首先提供此明确指定的密钥吗?这不是openssh客户端中的错误/错误功能吗?
arielf

2
但是它不应该使用该IdentityFile选项指定的密钥吗?例如,如果没有该IdentitiesOnly选项,则在尝试使用github时会尝试使用我的密钥ssh gitlab.com。这个不成立。
Iulian Onofrei,

188

我发现了一种更简单的方法(如果使用密码验证):

ssh -o PubkeyAuthentication=no username@hostname.com

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

参考


3
+1,希望我能给您更多。Raspberry Pi是我在没有公共密钥的情况下唯一使用的设备。正在得到:“ pi的身份验证失败太多”
blak3r 2013年

1
并用于rsyncrsync -av -e 'ssh -o PubkeyAuthentication=no' 'user@host.com:~/remote_file' 'local_file'
Ciro Santilli新疆改造中心法轮功六四事件

1
您还可以创建一个别名,以更快地进行密码身份验证。别名sshp ='ssh -o PubkeyAuthentication =
no'– dhempler

26

我也收到此错误,发现正在将服务器配置为接受最多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的方法可能是处理此问题的首选方法!


在最后一行中,您具有identificationfile /home/YOU/.ssh/foo,但它应该是identityfile(而不是f)
2014年

7

我在〜/ .ssh / config中添加了以下内容:

Host *
IdentitiesOnly yes

默认情况下,它将启用选项IdentitiesOnly = yes。如果需要使用私钥进行连接,则应使用选项-i进行指定


6

如果出现以下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

这正是我发生的一切!非常感谢您的解释;)
El Ninja Trepador

6

如果您有密码,并且只想使用密码登录,这就是您的操作方法。

要仅使用密码身份验证而不使用公钥,并且不使用有点误导性的“ keyboard-interactive”(包含密码的超集),可以从命令行执行此操作:

ssh -o PreferredAuthentications=password user@example.com

3

@David说,只需将其添加 IdentitiesOnly yes 到您的.ssh / config中,就可以完成与ssh -o PubkeyAuthentication=no.

登录后,删除.ssh/authorized_keys。现在,返回本地计算机并键入以下内容

cat ~/.ssh/id_rsa.pub | ssh -o PubkeyAuthentication=no user@IP_ADDR 'cat >> .ssh/authorized_keys'。这应该使用公钥重新启用ssh


2

我知道这是一个旧线程,但是我只想在此添加我遇到相同的错误消息,但这是由.ssh文件夹的所有者为root而不是使用密钥的用户引起的。我通过运行以下命令纠正了此问题:

sudo chown -R user:user /home/user/.ssh

我还确保对.ssh文件夹的权限正确:

sudo chmod 700 /home/user/.ssh

.ssh目录中的文件应具有600的权限:

sudo chmod 600 /home/user/.ssh/authorized_keys

我会在没有警告的情况下谨慎使用。某些密钥(特别是AWS)的SSH密钥权限通常限制为400。尝试将它们设置为高于此值将导致密钥不被接受,并可能使您无法使用AWS账户。
Michael Ryan Soileau'3

1

就我而言,问题是目录权限。这为我解决了:

$ chmod 750 ~;chmod 700 ~/.ssh


0

我有公共密钥.ssh/authorized_keys2,但是服务器配置为只读.ssh/authorized_keys

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

将文件移动到之后.ssh/authorized_keys,我可以使用密钥成功登录。


0

身份验证失败太多

该消息是由于给定远程SSH服务器上允许的限制而使身份验证尝试失败的次数过多而引起的。这可能意味着您在SSH代理中添加了太多身份。

以下是一些建议:

  • 添加-v以查看是否是这种情况(您使用了太多身份)。
  • 按列出添加的身份ssh-add -l
  • 通过以下方法从代理中删除失败的身份ssh-add -d
  • 您也可以删除所有身份,ssh-add -D然后仅重新添加相关身份。
  • 如果您可以访问SSH服务器,请选中该MaxAuthTries选项(请参阅:)man sshd_config

    相关文章:“ MaxAuthTries”限制的连接是什么sshd_config

  • 如果没有帮助,请确保您使用的是正确的凭据或文件。


-1

未输入正确的用户名和密码时,会出现此消息。

首先检查该用户是否已列出:

vim /etc/passwd
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.