这个问题的灵感来自此主题
假设情景如下:
- SSH 服务器(无论是路由器、防火墙等)在部署之前都首先在私有 + 安全的环境中进行配置。SSH 密钥在此环境中的服务器上本地生成。
- SSH 服务器有自己的 ACL,用于拒绝除我们的主机之外的任何连接
- 主机将是一台具有多个用户的 Linux 机器
标准方法可能是采用 PKI,在所有用户帐户上安装受信任的 CA,并部署本地 SCEP 服务器等。但是,除此以外,明智的做法是:
在安全环境中,在配置后,
known_hosts
使用以下命令将服务器的 RSA 指纹导入到主机的容器中(或存储它的任何地方,我对 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 服务器泄露。
答案1
您有内部 DNS 服务器吗?将主机公钥放入 SSHFP 记录中。现在它们可在整个组织中使用,而无需手动复制到任何地方。需要配置客户端计算机来VerifyHostKeyDNS yes
检查它们。如下所示/etc/ssh/ssh_config
:
Match host *.internal.example.com
VerifyHostKeyDNS yes
要阻止连接到未知主机,请使用StrictHostKeyChecking yes
。但请注意,需要连接到新主机的情况非常常见,因此这可能会带来足够的不便,导致用户试图绕过它。请参阅手册页以了解可能达到更好平衡的替代配置。