锁定在我自己的服务器之外:通过 ssh 连接时立即获得“太多的身份验证失败”

Arc*_*ona 28 ubuntu ssh amazon-web-services

我有一个用于宠物项目的 AWS EC2 Ubuntu 实例。当我有一天尝试登录时,出现此错误:

~$ ssh -i"/home/kona/.ssh/aws_kona_id" kona@server.akona.me -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
~$
Run Code Online (Sandbox Code Playgroud)

kona 是此服务器上启用的唯一帐户

我试过重新启动服务器,更改我的 IP 地址,然后等待。

编辑:

kona@arcticjieer:~$ ssh -o "IdentitiesOnly yes" -i"/home/kona/.ssh/aws_kona_id" -v kona@ec2-3-17-146-113.us-east-2.compute.amazonaws.com -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: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com 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.
kona@ec2-3-17-146-113.us-east-2.compute.amazonaws.com: Permission denied (publickey).
kona@arcticjieer:~$ 
Run Code Online (Sandbox Code Playgroud)

MLu*_*MLu 55

此错误通常意味着您的ssh-agent.

说明:您的 ssh 客户端将尝试ssh-agent一一使用所有密钥,然后才能使用指定的密钥-i aws_kona_id。是的,这有点违反直觉。因为每次这样的尝试都算作一次身份验证失败,并且默认情况下 SSH 服务器只允许 5 次尝试,所以您会看到以下错误:Too many authentication failures

您可以查看尝试使用的身份(密钥)ssh -v

解决方案是告诉ssh只使用在命令行上指定的身份:

ssh -o "IdentitiesOnly yes" -i ~/.ssh/aws_kona_id -v kona@server.akona.me
Run Code Online (Sandbox Code Playgroud)

如果它没有帮助在此处发布该命令的输出。

  • @hjpotter92 `-i` **不** 限制 ssh 将使用的密钥,而且`-i` 指定的密钥不需要先尝试。这就是为什么如果你想使用多个密钥(比如每个主机一个密钥)你真的需要使用 `.ssh/config` 并且在主机配置中总是指定 `IdentitiesOnly yes`。 (5认同)
  • 详细说明:这是因为您的客户端尝试私钥 1 失败,因为服务器不知道它,然后它尝试私钥 2,因为服务器不知道它失败,然后它尝试私钥 3,这失败,因为服务器不知道它,然后它放弃并且永远不会到达正确的第 5 个或第 6 个键。 (3认同)

Tim*_*Tim 29

我认为 MLu 的回答在这种情况下可能是正确的。验证这一点的方法是运行命令行 ssh 命令,指定服务器的正确密钥。

ssh -i "keyfile.pem" ec2-user@1.2.3.4
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,并且在“我已被锁定在我的服务器之外,求助!”的一般情况下,通常推荐的方法是将该卷作为数据卷安装到另一个实例。

  1. 停止 EC2 服务器。
  2. 将卷挂载到新实例上作为数据卷。
  3. 进行任何所需的调查或维修(查看日志、添加密钥等)。这可能包括创建新用户和新密钥、更改文件系统上的文件等。
  4. 将卷作为根卷挂载到原始实例上。

重复直到您可以访问。如果您无法访问,则至少可以访问您的数据。

  • 在这种情况下,这是一种矫枉过正,无论如何都可能无济于事,因为问题出在客户端,尝试了太多的密钥进行身份验证。 (3认同)
  • 您可能是对的@MLu,这是您没有密钥时的一般程序。可以通过在 ssh 命令行上指定正确的密钥来诊断问题。如果是这样,太好了,您的答案是完美的。这可以作为更一般的“我无法访问我的 EC2 服务器”的答案。 (3认同)

Gia*_*tta 27

默认情况下,SSH 会尝试所有可用的 SSH 密钥。它以“随机”顺序进行。指定该-i选项只是告诉 SSH 将该密钥文件添加到要尝试的密钥列表中。

它确实不是

  • 限制 SSH 仅使用该密钥
  • 告诉SSH尝试该键第一

最终发生的情况(如果您使用许多密钥,则经常发生)是 SSH 尝试了几个不起作用的随机密钥,并且服务器停止接受来自您的客户端的身份验证尝试。

如果要告诉 SSH“使用此密钥”,则必须指定IdentitiesOnly yes选项:

ssh -o "IdentitiesOnly yes" -i"/home/kona/.ssh/aws_kona_id" kona@server.akona.me -p22 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有了上面的内容,您.ssh/config应该可以简单地登录到您的服务器:

$ ssh kona.server
Run Code Online (Sandbox Code Playgroud)


MLu*_*MLu 5

您刚刚添加的详细输出显示您获得Permission denied~/.ssh/aws_kona_id.

这是一个完全不同的问题Too many authentication failures

也许您aws_kona_id不是用户的正确密钥(这就是为什么它不断尝试来自 ssh-agent 的所有其他身份)或者您应该使用默认的 EC2 用户帐户,例如ec2-userubuntu或您拥有什么。

尝试这些帐户或尝试为kona用户找到正确的密钥。