![被锁定在自己的服务器之外:通过 ssh 连接时立即收到“身份验证失败次数过多”的信息](https://linux22.com/image/744381/%E8%A2%AB%E9%94%81%E5%AE%9A%E5%9C%A8%E8%87%AA%E5%B7%B1%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E5%A4%96%EF%BC%9A%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%9E%E6%8E%A5%E6%97%B6%E7%AB%8B%E5%8D%B3%E6%94%B6%E5%88%B0%E2%80%9C%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%A4%B1%E8%B4%A5%E6%AC%A1%E6%95%B0%E8%BF%87%E5%A4%9A%E2%80%9D%E7%9A%84%E4%BF%A1%E6%81%AF.png)
我有一个用于宠物项目的 AWS EC2 Ubuntu 实例。有一天,当我尝试登录时,出现了以下错误:
~$ ssh -i"/home/kona/.ssh/aws_kona_id" [email protected] -p22
Enter passphrase for key '/home/kona/.ssh/aws_kona_id':
Received disconnect from [IP address] port 22:2: Too many authentication failures
Disconnected from [IP address] port 22
~$
kona
是此服务器上唯一启用的帐户
我尝试过重新启动服务器、更改 IP 地址并等待。
编辑:
kona@arcticjieer:~$ ssh -o "IdentitiesOnly yes" -i"/home/kona/.ssh/aws_kona_id" -v [email protected] -p22
OpenSSH_8.1p1 Debian-1, OpenSSL 1.1.1d 10 Sep 2019
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ec2-3-17-146-113.us-east-2.compute.amazonaws.com [3.17.146.113] port 22.
debug1: Connection established.
debug1: identity file /home/kona/.ssh/aws_kona_id type -1
debug1: identity file /home/kona/.ssh/aws_kona_id-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1p1 Debian-1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
debug1: match: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3 pat OpenSSH_7.0*,OpenSSH_7.1*,OpenSSH_7.2*,OpenSSH_7.3*,OpenSSH_7.4*,OpenSSH_7.5*,OpenSSH_7.6*,OpenSSH_7.7* compat 0x04000002
debug1: Authenticating to ec2-3-17-146-113.us-east-2.compute.amazonaws.com:22 as 'kona'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:D3sIum9dMyyHNjtnL7Pr4u5DhmP5aQ1jaZ8Adsdma9E
debug1: Host 'ec2-3-17-146-113.us-east-2.compute.amazonaws.com' is known and matches the ECDSA host key.
debug1: Found key in /home/kona/.ssh/known_hosts:41
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /home/kona/.ssh/aws_kona_id explicit
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/kona/.ssh/aws_kona_id
Enter passphrase for key '/home/kona/.ssh/aws_kona_id':
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey).
kona@arcticjieer:~$
答案1
这个错误通常意味着你得到了加载了太多按键ssh-agent
。
解释:您的 ssh 客户端将尝试逐个使用 中的所有密钥,ssh-agent
然后才能使用 指定的密钥-i aws_kona_id
。是的,这有点违反直觉。因为每次这样的尝试都算作一次验证失败默认情况下,SSH 服务器只允许 5 次尝试,您会收到以下错误:身份验证失败次数过多。
您可以查看尝试使用的身份(密钥)ssh -v
。
解决方案是告诉ssh
仅使用命令行上指定的身份:
ssh -o "IdentitiesOnly yes" -i ~/.ssh/aws_kona_id -v [email protected]
如果没有帮助,请在此处发布该命令的输出。
答案2
我认为 MLu 的答案在这种情况下可能是正确的。验证这一点的方法是运行命令行 ssh 命令,为服务器指定正确的密钥。
ssh -i "keyfile.pem" [email protected]
如果这不起作用,并且在“我被锁定在服务器之外,救命!”的一般情况下,通常建议的方法是将卷作为数据卷安装到另一个实例。
- 停止 EC2 服务器。
- 装载卷作为数据卷放到新实例上。
- 进行任何必要的调查或修复(查看日志、添加密钥等)。这可以包括创建新用户和新密钥、更改文件系统上的文件等。
- 将该卷作为根卷挂载到原始实例上。
重复此操作,直到您获得访问权限。如果您无法获得访问权限,此操作至少可以让您访问您的数据。
答案3
SSH 默认尝试所有可用的 SSH 密钥。它以“随机”顺序执行此操作。指定该-i
选项只是告诉 SSH 将该密钥文件添加到要尝试的密钥列表中。
确实如此不是:
- 限制 SSH 仅使用该密钥
- 告诉 SSH 尝试该密钥第一的
最终发生的情况(如果您使用多个密钥,则经常会发生)是 SSH 尝试几个不起作用的随机密钥,并且服务器停止接受来自客户端的身份验证尝试。
如果你想告诉 SSH“使用仅有的此键”必须指定IdentitiesOnly yes
选项:
ssh -o "IdentitiesOnly yes" -i"/home/kona/.ssh/aws_kona_id" [email protected] -p22
IdentitiesOnly yes
告诉 SSH 仅使用明确指定的密钥(在这种情况下仅使用指定的密钥-i
)。
这就是为什么当我为不同的主机使用自定义密钥时总是在 中定义主机配置.ssh/config
。这样我就可以使用一个简单的别名,更重要的是,指定IdentitiesOnly yes
要使用哪个键来避免这种错误:
Host kona.server
Hostname server.akona.me
IdentityFile ~/.ssh/aws_kona_id
IdentitiesOnly yes
Port 22
User kona
完成上述操作后,.ssh/config
您只需使用以下简单方法即可登录您的服务器:
$ ssh kona.server
答案4
尝试过多密钥是本地机器的问题,而不是服务器的问题。只需使用以下命令从本地 ssh-agent 内存中清除密钥即可
ssh-add -D
或者如果你知道哪个密钥与服务器错误关联,请使用
ssh-add -d <identity>
这可能要求您在下次连接时重新输入其他密钥/服务器组合的密码,但它将消除 EC2 机器上的登录阻止。