如何限制无密码 SSH?

如何限制无密码 SSH?

SSH 允许用户创建没有密码的密钥。这违反了一些安全要求。

如何在 OpenSSH 中实施一项策略,使没有密码的 SSH 密钥不起作用?

是否PermitEmptyPasswords只适用于无密钥登录?还是以通用方式适用于所有密码提示?

答案1

为了解决这个问题中似乎存在的根本误解:

当您创建密钥时,是否具有密钥密码的区别在于该密钥是以加密形式存储(受该密码保护)还是以纯文本形式存储在创建的密钥文件中。

即,提示输入密码完全是客户端行为,是在客户端读取密钥所必需的,而不是涉及服务器端的行为。

如果您想确保密钥以加密方式存储,那么这是客户端需要尝试执行的事情。
或者,您可能希望完全要求使用其他身份验证方法,或使用多种身份验证方法。

答案2

您无法强制密钥使用密码。但是,要强制使用双因素身份验证(您拥有的东西,即密钥,以及您知道的东西,即密码),您可以使用另一种方法。

在 OpenSSH 中,您可以设置AuthenticationMethods publickey,password中的参数/etc/ssh/sshd_config。这将强制用户同时使用公钥和密码身份验证,从而有效地为您提供双因素身份验证。

答案3

您提到的选项适用于密码,不适用于密钥。如果您想对密钥制定严格的策略,我有两个选择:

  1. 对用户工作站进行安全扫描并检查密钥是否加密。
  2. 实现类似密钥管理系统的功能,用户应创建密钥,服务器上的密钥通过此 KMS 提供,而不是存储在本地。使用这种方式,您可以确保私钥已加密。

答案4

PermitEmptyPasswords不适用于基于密钥的身份验证,它指定是否允许无密码登录。

服务器不知道客户端是否必须使用密码来解锁密钥。服务器端没有办法限制这一点。

相关内容