在一台机器上忽略 SSHknown_hosts

在一台机器上忽略 SSHknown_hosts

我在使用 ssh 和跳转主机时遇到了奇怪的行为。当设置在机器 A 上运行时(cygwin、OpenSSH_7.1p1、OpenSSL 1.0.2d 2015 年 7 月 9 日)它在机器 B 上不起作用(OpenSSH_6.7p1 Ubuntu-5ubuntu1.3、OpenSSL 1.0.1f 2014 年 1 月 6 日)。 Ansible 应该使用此设置通过堡垒主机连接到远程计算机。

我有以下内容ssh.config

Host bastion
    HostName               a.a.a.a
    ProxyCommand           none
    UserKnownHostsFile     known_hosts

Host *
    User                   user
    Port                   22
    ForwardAgent           yes
    ProxyCommand           ssh [email protected] nc %h %p
    PasswordAuthentication no
    UserKnownHostsFile     known_hosts

这些known_hosts文件位于同一文件夹中。

呼唤

ssh bastion -F ssh.config

在两台机器上都可以工作。尽管

ssh [email protected] -F ssh.config

只在机器 A 上工作,在 B 上不起作用,导致

The authenticity of host 'a.a.a.a (a.a.a.a)' can't be established.
ECDSA key fingerprint is ###.

我尝试将代理命令更改为

ProxyCommand ssh [email protected] -F ssh.config nc %h %p

这解决了这个问题

ssh [email protected] -F ssh.config

因为它现在可以在两台机器上运行。然而,该配置也由rsyncAnsible 运行,并且由于它是从另一个基本目录运行的,因此ssh.config无法找到该文件。我不想使用绝对路径来实现可移植性。这些脚本应该在本地计算机(某些 Windows 带有cygwin)上运行,也可以通过使用远程代理的专用构建服务器运行。

我现在已经设置ProxyCommand

ProxyCommand ssh -o UserKnownHostsFile=/dev/null \
  -o StrictHostKeyChecking=no [email protected] nc %h %p

这适用于 A+B 但也有rsync/问题ansible。日志给了我:

msg: Warning: Permanently added 'a.a.a.a' (ECDSA) to the list of known hosts.

主机密钥验证失败。

rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

TL;DR 初始配置无法无头工作,因为它需要手动步骤来设置主机密钥。替代方案确实破坏了以下工作流程 ( rsync)。还有其他选择吗?

答案1

“解决”主机密钥安全性的可能性是使用ssh-keyscan它将创建文件known_hosts,然后您可以连接而无需手动检查主机的真实性。

它可以这样使用:

ssh-keyscan hostname > known_hosts

您将失去“一点”安全性,但如果这在受信任的环境中运行,则这是可以接受的。

相关内容