我正在考虑删除基于密码的 SSH 登录。但是,我不想允许无密码的 SSH 密钥,因为那会更糟糕。
我如何确保只有具有密码的 SSH 密钥才能连接?
如果无法做到这一点,还有其他选择吗?比如集中管理 SSH 密钥生成,并阻止用户生成和/或使用自己的密钥?我想是类似 PKI 的东西。
答案1
可以在私钥上设置的密码是与 SSH 服务器无关或与它的连接。为私钥设置密码仅仅是密钥所有者可能采取的一种安全措施,以防止在私钥被盗的情况下第三方访问其远程 shell。
不幸的是,你不能强迫用户用密码保护他们的私钥。有时,为了自动访问远程 SSH 服务器,需要不受保护的私钥。我养成的一个好习惯是强烈推荐对于此类情况,建议用户哈希这已知主机文件(存储在〜/.ssh /已知主机),它保存了用户所连接的远程主机的信息,使用以下命令:
ssh-keygen -H -f ~/.ssh/known_hosts
这样,即使第三方获得了未受保护的私钥,也很难找出此密钥对哪些远程主机有效。当然,清除 shell 历史记录是此技术发挥作用的必要条件。
此外,您还应始终牢记的另一件事是,不允许 root 远程登录,方法是在 SSH 服务器的配置(sshd_config)中添加以下内容:
PermitRootLogin no
另一方面,如果你想阻止用户使用密钥进行身份验证,而是使用密码,你应该将以下内容添加到你的sshd_配置:
PasswordAuthentication yes
PubkeyAuthentication no
答案2
这是不可能的。
用户可以使用他们的密钥文件做任何事情,例如即使是您生成的密钥文件也可以转换为无密码文件。
答案3
你不能。一旦用户掌握了密钥数据,你就无法阻止他们删除密码。你需要寻找其他方式来进行身份验证。
答案4
一种缓解方法是使用 google authenticator PAM 模块插件。通常在官方软件包中可用。
这将使 2FA 可以通过智能手机上的 6 位代码使用。