强制执行 SSH 密钥密码?

Lee*_*e B 10 ssh password authentication keys

我正在考虑删除 SSH 的基于密码的登录。但是,我不想允许无密码的 ssh 密钥,因为那会更糟。

如何确保只有具有密码的 SSH 密钥才能连接?

如果无法做到这一点,是否有替代方案,例如集中管理 SSH 密钥生成,以及阻止用户生成和/或使用他们自己的密钥?我想像PKI这样的东西。

Bor*_*ide 23

可以在私钥上设置的密码与 SSH 服务器或与它的连接无关。为私钥设置密码仅仅是密钥所有者为了防止第三方访问他的远程外壳以防私钥被盗而可能采取的安全措施。

不幸的是,您不能强迫用户使用密码保护他们的私钥。有时,需要未受保护的私钥才能自动访问远程 SSH 服务器。一个很好的习惯,我强烈建议对于这样的情况是用户奉劝散列known_hosts的文件(保存在的〜/ .ssh / known_hosts中),这使对远程主机的用户连接到信息,使用下面的命令:

ssh-keygen -H -f ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

这样,即使第三方获得了对未受保护的私钥的访问权,也很难找出该密钥对哪些远程主机有效。当然,要使该技术具有任何价值,必须清除 shell 历史记录。

此外,您应该始终牢记的另一件事是,通过在 SSH 服务器的配置 (sshd_config) 中添加以下内容,不允许 root 远程登录:

PermitRootLogin no
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您想阻止用户使用密钥进行身份验证,而是使用密码,您应该将以下内容添加到您的sshd_config

PasswordAuthentication yes
PubkeyAuthentication no
Run Code Online (Sandbox Code Playgroud)


小智 8

这是不可能的。

用户可以用他们的密钥文件做任何事情,即使是你生成的,也可以转换成无密码。