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

Bra*_*lta 32 ssh bash shell rsync

我正在尝试创建一个自动将文件从一台服务器复制到多台服务器的系统.作为其中的一部分,我使用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
Run Code Online (Sandbox Code Playgroud)

Yor*_*sar 55

您可以事先将此主机的密钥添加到known_hosts,如下所示:

ssh-keyscan $someip >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

  • 这实际上回答了OP的问题,而不是解决它(并且可以说绕过使用主机密钥来识别使用SSH的系统的整个过程) (4认同)
  • @mxmader - 它有什么不同?你仍然会自动对"我信任这把钥匙"说"是" - 他们不是同样糟糕吗? (3认同)
  • @andybak:它不会关闭主机密钥验证,因此除非您的网络在"ssh-keyscan"时已经被破坏,否则您可以安全地使用MITM或者像这样. (2认同)
  • 我同意@AndyBaker - 如果您在运行 rsync 命令之前立即执行此操作,它只会将信任提前一行移动。 (2认同)

Bri*_*new 36

如果它们确实新主机,并且您无法known_hosts事先添加密钥(请参阅York.Sar的答案),那么您可以使用此选项:

-e"ssh -o StrictHostKeyChecking = no"

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

Iwn*_*nay 7

我知道这是3年前被问到的,但这是我的谷歌搜索的顶部,我无法在Vagrant脚本中找到这些解决方案中的任何一个,以便我正常工作.所以我想把我在其他地方找到的方法放在这里.

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

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

Host remote_host.com
    StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

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

Host *
    StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

要避免主机密钥验证,请不要使用192.168.1.*子网的known_hosts文件:

Host 192.168.0.*
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
Run Code Online (Sandbox Code Playgroud)

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