可以同时使用私钥和密码身份验证进行 ssh 登录吗?

信息安全 密码 SSH 服务器
2021-08-13 11:20:30

似乎它们是相互排斥的,因为禁用一个会给我另一个,反之亦然。我的 ssh 服务器的双因素身份验证听起来非常好,那么有什么方法可以做到这一点吗?

4个回答

在最近的 Fedora 和 RHEL 6 版本中,您可以使用RequiredAuthentications2 pubkey,password要求 pubkey密码身份验证。通常这样做是为了需要 pubkey 和 2 因素身份验证令牌,而不是用户的密码。

更新:现在在 RHEL / CentOS 7 以及任何具有最新版本 OpenSSH 的系统上,您可以使用:

AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

也可以使用 Match 指令来排除 IP或用户。

您可以在同一台服务器上同时进行公钥和密码身份验证。如果公钥认证失败,则进入密码认证。

至于同时要求两者,这似乎很愚蠢且适得其反,并且检查man sshd_config没有这样做的选项。

你的 ssh 私钥应该有一个安全的密码。因此,如果攻击者获得了您的私钥,他们仍然无法在没有首先获得您的密码的情况下做任何事情。如果他们已经泄露了该密码(很可能是使用键盘记录器;或者通过暴力破解极其弱的密码),他们也可以轻松地获取/暴力破解任何记住的密码。

如果你真的想要,你可以使用 ForceCommand 设置一些东西(例如,只允许公钥认证,然后将用户引导到提示输入密码的 shell)。我不推荐这个。

如果您想限制暴露,一个更好的选择是设置防火墙来限制可以到达 ssh 端口的 IP;如果您可能需要在某个时候从另一台计算机建立隧道,则可能会在某处的服务器上运行额外的 VPN。您也可以在特定端口敲门模式之后使用敲门之类的东西在防火墙上打开一个洞,但要认识到任何窃听流量的人都可以重放敲门模式以打开端口。

(这些天用更新的解决方案交叉发布SO 答案)

如果您阅读了 的手册页sshd_config(5),则有一个 option AuthenticationMethods,它列出了您在被授予访问权限之前需要通过的方法列表。您需要的设置是:

AuthenticationMethods publickey,password

此方法应该适用于所有具有最新 openssh(openssh-6、openssh-7)的当前 Linux 系统。

旧系统

我知道的唯一例外是 RHEL 6(openssh-5.3),它需要设置具有相同值的不同选项(如另一个答案中所述):

RequiredAuthentications2 publickey,password

我对此进行了更多研究,并提出了以下建议。

您可以使用 PAM 进行两因素身份验证,但这样做不会使用 SSH 密钥,而是使用不同的两个因素。

例如,您可以将 google 与他们的两个因素身份验证一起使用,并使用 pam 进行身份验证,如在

http://www.techrepublic.com/blog/opensource/two-factor-ssh-authentication-via-google-secures-linux-logins/2607