这不是另一个关于如何在远程主机之间复制文件的问题,我已经知道如何做到这一点。我问的是当所涉及的服务器未设置为相互信任时(通过 ssh 密钥、子网白名单或任何其他方法)的解决方法。
我正在考虑几个替代方案,但我不知道哪一个是最好的。
- 将源主机上的 Samba 共享安装到目标主机。这样做的问题是,我的剧本将需要 Samba 凭据,并且可能需要 root 访问权限,除非必要,否则我倾向于避免这种情况
- 将 ansible 控制器的 ssh 密钥临时复制到源主机,然后运行正常的 ansible fetch(如果 fetch 不允许我指定 ssh 密钥,则运行 rsync)。这样做的问题是,运行失败可能会将 ssh 密钥留在源机器上。即使它们位于 /tmp 文件夹中(该文件夹应该不会存在很长时间),也感觉像是一种风险
- 将文件复制到 ansible 控制器,然后将文件复制到目标服务器。这可能是最简单、最安全的解决方案,但这实际上会使我的本地网络流量翻倍,并且需要在 ansible 控制器上执行清理任务,并且可能需要增加本地文件系统的大小,因为数据库备份可能很大
- 在目标服务器上设置其他文件传输方法(例如,与 S3 兼容的方法)并使用它,但这也可能需要源机器上进行额外的安装步骤,有了这样的要求,我只需在节点之间正确设置 ssh 即可