这个问题的灵感来自这个线程
假设场景,对于上下文如下:
- SSH 服务器,无论是路由器、防火墙等,都首先在私有 + 安全环境中进行配置,然后再进行部署。SSH 密钥是在此环境中的服务器上本地生成的。
- SSH 服务器有自己的 ACL,用于拒绝来自除我们主机之外的任何东西的连接
- 主机将是具有多个用户的 Linux 机器
标准方法可能是使用 PKI,并在所有用户帐户上安装受信任的 CA,并部署本地 SCEP 服务器等。但取而代之的是,谨慎的做法是:
在安全环境中,并在配置时,将服务器的 RSA 指纹导入
known_hosts
我们主机的容器(或存储它的任何地方,我对 Linux 还不太熟悉),使用ssh-keyscan -H x.x.x.x >> ~/.ssh/known_hosts
在该主机上的用户之间共享/镜像该 RSA 指纹容器
配置主机/每个用户在出现以下提示时拒绝/丢弃/拒绝连接,以便
The authenticity of host '[hostname] ([IP address])' can't be established. RSA key fingerprint is [key fingerprint]. Are you sure you want to continue connecting (yes/no)?
- 他们无法连接到任何未完成此过程的服务器,然后
- 对于无法实施上述过程+限制但仍需要远程配置的情况,也许创建一个单独的沙盒用户,以便主要更常用的密码不会被可能的假 SSH 服务器破坏。
您有内部 DNS 服务器吗?将主机公钥放入 SSHFP 记录中。现在它们可以在您的整个组织中使用,而无需在任何地方手动复制。需要配置客户端计算机
VerifyHostKeyDNS yes
以检查它们。像这样的东西/etc/ssh/ssh_config
:要防止连接到未知主机,请使用
StrictHostKeyChecking yes
. 但请注意,需要连接到新主机是很常见的,因此这可能会带来足够的不便,导致用户尝试绕过它。有关可能达到更好平衡的替代配置,请参见手册页。