我正在体验使用ssh与跳转主机的奇怪行为。虽然设置工作在机器A (cygwin,OpenSSH_7.1p1,OpenSSL 1.0.2d 2015年7月9日),但它不工作在机器B (OpenSSH_6.7p1 Ubuntu-5 ubuntu1.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 forward@a.a.a.a nc %h %p
PasswordAuthentication no
UserKnownHostsFile known_hostsknown_hosts文件驻留在同一个文件夹中。
呼叫
ssh bastion -F ssh.config在两台机器上都能工作。而
ssh user@b.b.b.b -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 forward@a.a.a.a -F ssh.config nc %h %p这解决了问题
ssh user@b.b.b.b -F ssh.config因为它现在在两台机器上都能工作。然而,rsync也使用这个配置,它是由Ansible运行的,因为它是从另一个基本目录运行的,所以找不到ssh.config文件。我不想使用绝对路径来允许可移植性。脚本应该在本地机器上运行(一些带有cygwin的Windows ),也可以由使用远程代理的专用构建服务器运行。
我现在已经将ProxyCommand设置为
ProxyCommand ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no forward@a.a.a.a 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]初始配置不会无头工作,因为它需要手动步骤来设置主机键。这些替代方案确实破坏了以下工作流(rsync)。还有其他选择吗?
发布于 2015-10-21 18:32:04
“解决”主机密钥安全的可能性是使用ssh-keyscan,这将创建您的known_hosts文件,然后您可以不检查主机的真实性手动连接。
它可以这样使用:
ssh-keyscan hostname > known_hosts您将失去安全的“一点”,但是如果这在可信环境中运行,则是可以接受的。
https://unix.stackexchange.com/questions/237700
复制相似问题