rsyncing时如何自动接受远程密钥?

Posted

技术标签:

【中文标题】rsyncing时如何自动接受远程密钥?【英文标题】:How to automatically accept the remote key when rsyncing? 【发布时间】:2013-08-10 00:28:53 【问题描述】:

我正在尝试创建一个系统,它可以自动将文件从一台服务器复制到多台服务器。作为其中的一部分,我正在使用 rsync 并安装 SSH 密钥,它可以正常工作。

我的问题是,当它第一次尝试连接到新服务器时,它会要求确认。有没有办法自动接受?

示例命令/输出:

rsync -v -e ssh * root@someip:/data/
The authenticity of host 'someip (someip)' can't be established.
RSA key fingerprint is somerandomrsakey.
Are you sure you want to continue connecting (yes/no)? yes

【问题讨论】:

【参考方案1】:

如果他们真的新主机,并且您不能事先将密钥添加到known_hosts(请参阅 York.Sar 的回答),那么您可以使用此选项:

-e "ssh -o StrictHostKeyChecking=no"

【讨论】:

更具体地说:-o StrictHostKeyChecking=no 或编辑 /etc/ssh/ssh_config 或 ~/.ssh/config) 这种方法会降低安全性。除非没有其他方法(例如目标的 IP 和主机名不断变化),否则不应使用它。 我们需要使用这种方法(或删除并添加带有ssh-keygen -Rssh-keyscan -H 的密钥,因为我们的主机在 AWS 上并且每晚都被销毁,然后每天早上重建 - 似乎有没有其他方法可以阻止 ssh 引发的“中间人”警告! -o 不是 rsync 选项。这是一个 ssh 选项。对于 rsync 像这样添加它-e "ssh -o StrictHostKeyChecking=no" .【参考方案2】:

我知道这是 3 年前提出的,但这是我的谷歌搜索的顶部,我无法在 Vagrant 脚本的中间找到这些解决方案中的任何一个来为我正常工作。所以我想把我找到somewhere else的方法放在这里。

那里的解决方案谈到使用以下代码块更新~/.ssh/config/etc/ssh/ssh_config 文件。

禁用对特定主机(例如 remote_host.com)的主机密钥检查:

Host remote_host.com
    StrictHostKeyChecking no

要为您连接的所有主机关闭主机密钥检查:

Host *
    StrictHostKeyChecking no

为了避免主机密钥验证,并且不对 192.168.1.* 子网使用 known_hosts 文件:

Host 192.168.0.*
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null

我希望这可以帮助遇到此问题的其他人。

【讨论】:

【参考方案3】:

您可以像这样预先将此主机的密钥添加到 known_hosts:

ssh-keyscan $someip >> ~/.ssh/known_hosts

【讨论】:

这实际上回答了 OP 的问题,而不是解决它(并且可以说绕过使用主机密钥来识别使用 SSH 的系统的全部要点) @mxmader - 它有什么不同?你仍然自动对“我相信这把钥匙”说“是”——它们不是同样糟糕吗? @andybak:它不会关闭主机密钥验证,因此除非您的网络在ssh-keyscan 时已经受到威胁,否则您可以免受 MITM 或类似的伤害。 我同意@AndyBaker - 如果您在运行 rsync 命令之前立即执行此操作,它只会将信任提前一行。 @AndyBaker not if used only 在“第一次”的情况下,按照 OP 的指定建立 SSH 连接(因此我使用“文件附加”操作员)。对于后续连接,我同意我的答案的实用性在逻辑上等同于完全忽略主机密钥。

以上是关于rsyncing时如何自动接受远程密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不询问密码提示的情况下自动执行rsync [关闭]

Rsync+shell脚本完成自动化备份

创建Rsync GUI以备份到远程服务器

1.7-自动登录expect脚本

rsync+inotify自动同步

rsync结合inotify实现数据自动同步