我有一个启用了 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
,您还有其他几个选项。
- 增加
MaxAuthTries
(在 ssh 服务器上) - 删除目录中存在的一些密钥对
~/.ssh/
并运行ssh-add -D
~/.ssh/config
在文件中明确将密钥链接到给定主机
就像这样:
host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
这可能不是一个好办法,因为它会削弱你的 ssh 服务器,因为它现在会在给定的连接尝试中接受更多密钥。想想这里的暴力攻击媒介。
假设您拥有不需要的并且可以永久删除的密钥,这是一个很好的方法。
设置 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