如何使用 OpenSSH 启用密码和公钥身份验证

如何使用 OpenSSH 启用密码和公钥身份验证

我希望 sshd 能够验证用户的公钥,然后提示输入密码,而不是只输入其中一个。这可能吗?

答案1

目前还没有。但是有一些补丁应该可以添加这个功能。

https://bugzilla.mindrot.org/show_bug.cgi?id=983

答案2

这终于可用了从 OpenSSH 6.2 开始(2013 年 3 月发布),使用AuthenticationMethods配置选项。

例如,您可以添加以下行以sshd_config要求公钥和密码验证:

AuthenticationMethods publickey,password

登录时,sshscp首先执行公钥认证,然后提示输入密码:

$ ssh [email protected]
Authenticated with partial success.
[email protected]'s password:

如果你的私钥文件有密码,你当然会首先被提示输入密码。示例使用PuTTY

Using username "user".
Authenticating with public key "rsa-key-20131221-user"
Passphrase for key "rsa-key-20131221-user":
Further authentication required
[email protected]'s password:

答案3

RHEL/CentOS 6.3 中的 OpenSSH 现在支持此功能,尽管我在 OpenSSH 发行说明中没有找到提及此功能。从RHEL 发行说明

SSH 现在可以设置为需要多种身份验证方式(而以前 SSH 允许多种身份验证方式,但只需一种身份验证即可成功登录);例如,登录启用 SSH 的计算机需要输入密码和公钥。可以在文件中配置RequiredAuthentications1和选项以指定成功登录所需的身份验证。例如:RequiredAuthentications2/etc/ssh/sshd_config

   ~]# echo "RequiredAuthentications2 publickey,password" >> /etc/ssh/sshd_config

有关上述/etc/ssh/sshd_config选项的更多信息,请参阅sshd_config手册页。

答案4

这是可行的,但有点笨拙和有限。首先,您只允许公钥身份验证。然后添加/etc/ssh/sshd_config一个ForceCommand执行脚本来检查密码。

除非您检查命令是 sftp 并允许其无需密码通过,否则脚本将破坏 SFTP。

我从来没有尝试过这个,所以有人可能会看到更多问题。

相关内容