我正在考虑删除基于密码的SSHlogin。 但是,我不想让无密码的SSH密钥,因为这将更糟糕。
我怎样才能确保只有有密码的SSH密钥才能连接?
如果无法完成,是否有其他select,如集中pipe理SSH密钥生成,以及防止用户生成和/或使用自己的密钥? 就像PKI,我想。
可以在私钥上设置的密码与SSH服务器或与其的连接无关 。 为私钥设置密码仅仅是密钥所有者为防止第三方访问他的远程shell而采取的安全措施,以防私钥被盗用。
不幸的是,你不能强制用户使用密码保护私钥。 有时,为了自动访问远程SSH服务器,需要不受保护的私钥。 我强烈build议这种情况下的一个好习惯是build议用户使用以下命令来散列 known_hosts文件(存储在〜/ .ssh / known_hosts ),该文件保存用户连接到的远程主机的信息:
ssh-keygen -H -f ~/.ssh/known_hosts
这样,即使第三方获得了未受保护的私钥,也很难找出这个密钥有效的远程主机。 当然,清除shell历史logging对于这项技术来说是强制性的。
另外,你应该时刻记住的另一件事情是不允许root用户通过在SSH服务器的configuration(sshd_config)中添加以下内容来远程login:
PermitRootLogin no
另一方面,如果要阻止用户使用密钥进行身份validation,而使用密码,则应将以下内容添加到sshd_config中 :
PasswordAuthentication yes PubkeyAuthentication no
这是不可能的。
用户可以用他们的密钥文件做任何事情,即使你生成了密码,也可以转换成无密码。
你不能。 一旦用户拥有关键数据,您将无法阻止他们移除密码。 你需要寻找其他的方式来做你的authentication。
为了获得对用户密钥的控制,必须将所有密钥移动到根拥有的根目录,其中密钥是可读的但不能由最终用户修改。 这可以通过更新sshd_config来完成。
一旦密钥文件位于受控位置,您将需要一个pipe理界面来更新(并强制实施密码策略),然后将密钥分发给所需的主机。 您可以自己滚动,也可以查看FoxT / Tectia等产品。