强制执行SSH密钥密码?


9

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

如何确保只有具有密码的SSH密钥可以连接?

如果无法做到这一点,是否还有其他选择,例如集中管理SSH密钥生成以及阻止用户生成和/或使用自己的密钥?我想像PKI。

Answers:


20

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

不幸的是,您不能强迫用户使用口令来保护其私钥。有时,需要未受保护的私钥才能自动访问远程SSH服务器。在这种情况下,我强烈建议一个好习惯,是建议用户对known_hosts文件(存储在〜/ .ssh / known_hosts中)进行哈希处理,该文件使用以下命令保留有关用户连接到的远程主机的信息:

ssh-keygen -H -f ~/.ssh/known_hosts

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

另外,您还应牢记另一件事,即不允许root用户通过在SSH服务器的配置(sshd_config)中添加以下内容来远程登录:

PermitRootLogin no

另一方面,如果要阻止用户使用密钥进行身份验证,而要使用密码,则应在sshd_config中添加以下内容:

PasswordAuthentication yes
PubkeyAuthentication no

8

这是不可能的。

用户可以使用其密钥文件执行任何操作,即使例如您生成了密钥文件,也可以将其转换为无密码。


3

你不能 一旦用户拥有了关键数据,就无法阻止他们删除密码短语。您需要寻找进行身份验证的其他方法。


2

要获得对用户密钥的控制权,必须将所有密钥移到根拥有的目录中,最终用户可以在其中读取这些密钥,但不能对其进行修改。这可以通过更新sshd_config来完成。

一旦密钥文件位于受控位置,您将需要一个管理界面来更新(并强制执行密码策略),然后将密钥分发给所需的主机。要么自己动手,要么看看诸如FoxT / Tectia等产品。


...这打破了公钥的好处
Patwie '17

0

一种缓解措施是使用google authenticator PAM模块插件。通常在官方包装内提供。

这将通过智能手机上的6位代码使2FA可用。

此处的说明: 如何在Ubuntu 16.04上为SSH设置多重身份验证


1
您应该注意,这并不能直接回答问题,而是(不错的)替代方案。
ceejayoz

1
@ceejayoz你是对的。我刚刚在答案的开头添加了“一个缓解方法是使用..”,以明确表明它是替代方法。
罗勒A

-1

简单,您只需扩展SSH协议,以便SSH客户端或SSH代理报告/设置一个标志,以说明原始私钥是否已加密(也许服务器端甚至可以提出查询)-因为客户端具有可见性私钥的密码,甚至在密钥加密时已经提示输入密码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.