![如何限制无密码 SSH?](https://linux22.com/image/778677/%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%E6%97%A0%E5%AF%86%E7%A0%81%20SSH%EF%BC%9F.png)
SSH 允许用户创建没有密码的密钥。这违反了一些安全要求。
如何在 OpenSSH 中实施一项策略,使没有密码的 SSH 密钥不起作用?
是否PermitEmptyPasswords
只适用于无密钥登录?还是以通用方式适用于所有密码提示?
答案1
为了解决这个问题中似乎存在的根本误解:
当您创建密钥时,是否具有密钥密码的区别在于该密钥是以加密形式存储(受该密码保护)还是以纯文本形式存储在创建的密钥文件中。
即,提示输入密码完全是客户端行为,是在客户端读取密钥所必需的,而不是涉及服务器端的行为。
如果您想确保密钥以加密方式存储,那么这是客户端需要尝试执行的事情。
或者,您可能希望完全要求使用其他身份验证方法,或使用多种身份验证方法。
答案2
您无法强制密钥使用密码。但是,要强制使用双因素身份验证(您拥有的东西,即密钥,以及您知道的东西,即密码),您可以使用另一种方法。
在 OpenSSH 中,您可以设置AuthenticationMethods publickey,password
中的参数/etc/ssh/sshd_config
。这将强制用户同时使用公钥和密码身份验证,从而有效地为您提供双因素身份验证。
答案3
您提到的选项适用于密码,不适用于密钥。如果您想对密钥制定严格的策略,我有两个选择:
- 对用户工作站进行安全扫描并检查密钥是否加密。
- 实现类似密钥管理系统的功能,用户应创建密钥,服务器上的密钥通过此 KMS 提供,而不是存储在本地。使用这种方式,您可以确保私钥已加密。
答案4
PermitEmptyPasswords
不适用于基于密钥的身份验证,它指定是否允许无密码登录。
服务器不知道客户端是否必须使用密码来解锁密钥。服务器端没有办法限制这一点。