如何设置sshd以同时需要私钥和密码?

如何设置sshd以同时需要私钥和密码

在/ etc / ssh / sshd_config中,我目前有:

RSAAuthentication yes PubkeyAuthentication yes PasswordAuthentication yes 

但显然这允许用户使用私钥或密码login。

您需要设置一个SSH网守。 这允许openssh允许多因素身份validation。

这是一个很好的链接: https : //calomel.org/openssh.html

实质上,您使用ForceCommand指令在用户login时运行脚本。然后该脚本提示用户input密码。 我目前正在寻找一种方法来validation给定的密码对系统密码,但我来(可以理解)空白。

如果用户帐户存储在LDAP目录中,则可以尝试使用这些凭据绑定到目录,但问题在于运行的程序将以用户身份运行,而不是以root身份运行。 我不知道编写代码并将其设置为SUID的安全含义。

希望有人会给你一个更好的答案。

但既然我input了这么多,你是在一个超安全的网站? 因为这真的是唯一的原因。 具有密码的普通公共密钥应该足以满足99%的情况。

OpenSSH的最新版本使得这一切变得更加容易!

/etc/ssh/sshd_config只需添加以下内容:

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

如果您希望允许特定IP地址(例如192.168.10.10)能够使用OpenSSH缺省方法login,但要求每个其他IP地址同时使用密码和密钥,则可以添加以下“ Match块:

 Match Address "*,!192.168.10.10" AuthenticationMethods "publickey,password" "publickey,keyboard-interactive" 

虽然没有很好的文档logging,但是在比赛线上需要使用前面的星号; Match Address "!192.168.10.10"实际上永远不会匹配。 这可能会在未来版本的OpenSSH中发生变化 。

双因素authentication? 不完全的。 证书是比密码更强的身份validation方法。

如果您担心证书可能受到损害,请设置私钥以进行密码保护。 这可确保在使用证书之前提示用户input密码。 这给你双因素authentication。 您将知道连接来自同时拥有私钥解密密码的人。

并在你的SSH服务器上禁用密码authentication。 这阻止了人们使用字典/暴力攻击。