公钥认证在 openssh 中如何工作?

公钥认证在 openssh 中如何工作?

我在 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 客户端不会将失败的密钥视为身份验证问题。只有当所有身份验证方法都失败时,它才会返回失败。

相关内容