我在 RHEL 6 操作系统上运行。我可以在我的/var/log/secure
文件中看到失败的登录尝试(密码失败)。但是,当密钥不正确时,我没有看到尝试 ssh 到服务器。例如,如果我发出 ssh 请求:
ssh -o BatchMode=yes -i ./id_rsa [email protected]
返回结果为:
Permission denied (publickey,password,keyboard-interactive).
但是,这个失败似乎没有记录。有什么想法吗?我甚至在 sshd_config 文件中设置/var/log/secure
了 LogLevel 。VERBOSE
答案1
公钥认证在 openssh 中如何工作?
为了完全清楚地说明发生了什么,公钥认证分为两个步骤。第一步仅提供信息,第二步检查整个密钥对。
第一步
只是检查提供的公钥是否与服务器authorized_keys
文件中可用的某些密钥匹配,并且不会在默认日志级别中记录为错误,因为许多人只是将他们的密钥存储在代理或某个地方,然后将其提供给所有服务器。这通常会退回到密码身份验证。如果您设置了 VERBOSE 日志级别,您还应该看到此消息/var/log/secure
(至少在最新的 rhel6openssh
软件包中)。
第二步
验证私人部分的所有权,并进行真正的非对称加密,如果这次失败,则应该记录下来,因为它更像是失败的身份验证尝试。
暴力破解是否可行?
不记录公钥身份验证尝试的目的还在于,这基本上不可能成为任何暴力攻击的目标,因为与密码相比,状态空间太大(例如 1024b 密钥),您可以尝试所有 8 个字符的密码(大约 64b 或熵最大值,但通常要少得多,因为您可以使用许多启发式方法 - 词汇表、仅字母表等)。在密钥中,您只有一个大数字。
RHEL 上有日志!
在 RHEL/CentOS/Fedora 上,您可以使用 的进步audit
,其中还包含这些失败的身份验证尝试。您可以在/var/log/audit/audit.log
事件USER_AUTH
中找到它们res=failed
我希望这对你有点帮助。
答案2
SSH 代理中可以有多个密钥。即使只允许一个密钥,所有这些密钥都将用于 ssh 连接测试。因此,ssh 客户端不会将失败的密钥视为身份验证问题。只有当所有身份验证方法都失败时,它才会返回失败。