如何限制无密码SSH?

Gio*_*oni 6 ssh

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

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

只适用PermitEmptyPasswords于没有密钥的登录吗?或者以通用方式显示所有密码提示?

Håk*_*ist 30

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

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

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

如果您想确保密钥以加密方式存储,则需要在客户端尝试强制执行。
或者,您可能需要一些其他身份验证方法,或多种身份验证方法。

  • 一个有用的类比可能是用户将密码写在一张贴在显示器上的纸上 - 您可以制定一个策略,规定他们不能这样做,但您不能将 SSH 服务器配置为拒绝这样做的用户登录。服务器可以检查用户是否提供了正确的密码,但不知道他们是否从记忆中输入密码,从安全良好的密码管理器复制密码,或从一张纸上读取密码。以同样的方式,它可以检查他们是否提供了正确的密钥,但无法判断其存储的格式,以及如果使用任何密码对其进行静态加密会怎样。 (13认同)

小智 9

您无法在密钥上强制使用密码。但是,要强制实施双因素身份验证(您拥有的密钥,以及您知道的密码),您可以使用另一个选项。

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


Rom*_*nov 7

您提到的选项对密码有效,对密钥无效。如果你想对密钥有严格的政策,我看到两个选择:

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


Ger*_*der 4

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

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