我不明白的 SSH 日志:超出最大身份验证尝试次数

我不明白的 SSH 日志:超出最大身份验证尝试次数

我正在尝试解密我的所有 ssh 日志(以便使用 logstash 为它们提供合理的标签)。但我发现一个我不太理解的情况:

Oct 23 07:43:47 sshd[59830]: Connection from 74.194.6.5 port 60126 on 213.67.100.148 port 22
Oct 23 07:43:51 sshd[59830]: error: maximum authentication attempts exceeded for root from 74.194.6.5 port 60126 ssh2 [preauth]
Oct 23 07:43:51 sshd[59830]: Disconnecting authenticating user root 74.194.6.5 port 60126: Too many authentication failures [preauth]

它如何能够在没有给出任何身份验证尝试迹象的情况下达到最大身份验证尝试次数?

通常在“最大授权...”行出现之前我会得到类似的信息。

Oct 23 08:54:06 sshd[62392]: Failed keyboard-interactive/pam for [...]
Oct 23 08:52:41 sshd[49690]: Failed publickey for [...]

但不总是。

请注意,我登录没有问题。

答案1

当 ssh 客户端尝试基于密钥的登录并提供更多信息时,会触发该错误消息MaxAuthTries无效密钥。SSH 服务器将断开连接。这可能是由根本没有有效密钥的(恶意)客户端造成的,也可能是由拥有许多不同密钥对的有效用户造成的,并且在MaxAuthTries交换有效密钥之前密钥对数量就已达到上限。发生这种情况时,连接将被终止,甚至无法达到提供/尝试替代登录方法的阶段。

(在默认日志级别)ssh 服务器不会记录交换/尝试的失败密钥,因此错误消息“ error: maximum authentication attempts exceeded for ... ssh2 [preauth]”似乎在日志文件中没有任何先前的身份验证尝试就出现了。


您可以使用以下方法轻松模拟:

  1. 创建大量一次性密钥用于测试:

    for n in $(seq 1 10 ) ; do ssh-keygen -b 2048 -t rsa -f /tmp/sshkey-$n -q -N "" ; done
    
  2. 使用多种-i选项为您的 ssh 客户端提供可能的密钥:

    ssh  -v -i /tmp/sshkey-1  -i /tmp/sshkey-2  -i /tmp/sshkey-3  ... user@host
    

    你会看到客户端不断提供一个又一个私钥,直到远程 ssh 守护进程断开连接:

debug1:下一个身份验证方法:publickey
debug1:提供 RSA 公钥:/tmp/sshkey-1
debug2:我们发送了一个公钥包,等待回复
debug1:可以继续的身份验证:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供 RSA 公钥:/tmp/sshkey-2
debug2:我们发送了一个公钥包,等待回复
debug1:可以继续的身份验证:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供 RSA 公钥:/tmp/sshkey-3
debug2:我们发送了一个公钥包,等待回复
debug1:可以继续的身份验证:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供 RSA 公钥:/tmp/sshkey-4
debug2:我们发送了一个公钥包,等待回复
debug1:可以继续的身份验证:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供 RSA 公钥:/tmp/sshkey-5
debug2:我们发送了一个公钥包,等待回复
debug1:可以继续的身份验证:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供 RSA 公钥:/tmp/sshkey-6
debug2:我们发送了一个公钥数据包,等待回复
收到从 hostn 端口 22:2 断开连接:身份验证失败次数过多
身份验证失败

尝试使用第 6个无效密钥进行身份验证后,连接将被拒绝。这对应于MaxAuthTriessshd_config在配置文件中设置6

在安全日志中,sshd 守护进程将仅记录:

sshd[19032]: 错误:从 10.9.8.7 端口 54956 登录时身份验证尝试次数超出最大限制 ssh2 [preauth]
sshd[19032]: 断开连接:身份验证失败次数过多 [preauth]

增加 sshd_configLogLevelVERBOSE生成额外的日志事件,当失败的密钥被记录时,结果“已超出最大身份验证尝试次数...身份验证失败次数过多” 更有意义:

sshd[19271]: 从 10.9.8.7 端口 58823 连接到 10.9.8.8 端口 22
sshd[19271]: 从 10.9.8.7 端口 58823 ssh2 登录的公钥失败:RSA SHA256:QGnu...fpY
sshd[19271]: 从 10.9.8.7 端口 58823 ssh2 登录的公钥失败:RSA SHA256:cjje...dDo
sshd[19271]: 从 10.9.8.7 端口 58823 ssh2 登录的公钥失败:RSA SHA256:IIWe...d1M
sshd[19271]: 从 10.9.8.7 端口 58823 ssh2 登录的公钥失败: RSA SHA256:xrQs...Et0
sshd[19271]: 从 10.9.8.7 端口 58823 登录的公钥失败 ssh2:RSA SHA256:0Zln...UI4
sshd[19271]: 从 10.9.8.7 端口 58823 登录的公钥失败 ssh2:RSA SHA256:hhsj...7Q4
sshd[19271]: 错误:从 10.9.8.7 端口 58823 ssh2 登录的最大身份验证尝试次数已超出 [preauth]
sshd[19271]: 断开连接:身份验证失败次数过多 [preauth]

答案2

根据sshd 配置手册页

最大授权尝试次数
指定每个连接允许的最大身份验证尝试次数。一旦失败次数达到此值的一半,就会记录更多失败。默认值为 6。

如您所见,该限制以每个连接为单位有效,并且并非所有尝试都会被记录。您还可以选择要在日志中记录多少信息

日志级别
指定从 sshd(8) 记录消息时使用的详细程度。可能的值有:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2 和 DEBUG3。默认值为 INFO。DEBUG 和 DEBUG1 是等效的。DEBUG2 和 DEBUG3 各自指定更高级别的调试输出。使用 DEBUG 级别记录会侵犯用户的隐私,因此不建议使用。

OpenSSH/日志记录和故障排除您可以查看日志示例,其中可以看到拒绝部分与您显示的部分类似:

...
Mar 19 11:11:10 server sshd[54798]: Failed password for root from 122.121.51.193 port 59928 ssh2
Mar 19 11:11:10 server sshd[54798]: error: maximum authentication attempts exceeded for root from 122.121.51.193 port 59928 ssh2 [preauth]
Mar 19 11:11:10 server sshd[54798]: Disconnecting authenticating user root 122.121.51.193 port 59928: Too many authentication failures [preauth]

总结一下,失败的身份验证尝试并不总是会被发送到日志中。可以在 httpd 的 conf 文件中配置该行为。

现在,根据我将 ssh 暴露给互联网的不太愉快的经历,让我给出一些一般性建议:

  • 请不要允许用户/密码访问。您应该只使用私钥/公钥对。外面有很多坏人。
  • 无论如何,都不应允许 root 通过 SSH 进入。
  • 考虑安装 fail2ban 或类似的东西,可以禁止 IP 访问你的系统

答案3

另一件事是,如果你想使用密码通过 ssh 以 root 用户身份登录,并且你的配置设置为PermitRootLogin prohibit-password它将以错误结束error: maximum authentication attempts exceeded for root from 10.0.12.12 port 58656 ssh2 [preauth]

答案4

我的解决方案是增加参数MaxAuthTries 20PasswordAuthentication yes在文件中/etc/ssh/sshd_config临时启用,然后继续重新启动服务systemctl restart sshd

此外,我继续将我的 ssh-key 复制到计算机,然后就可以登录服务器了。

ssh-copy-id -i /tmp/id_rsa_home.pub <user>@<host>

最后,继续禁用PasswordAuthentication并重新启动服务(systemctl restart sshd)。

问候

相关内容