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 -R
和ssh-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时如何自动接受远程密钥?的主要内容,如果未能解决你的问题,请参考以下文章