Ali*_*iBZ 6 rsync virtual-machines
我正在寻找在 2 个远程服务器之间使用 rsync 的解决方案。这似乎是不可能的。有谁知道为什么它不可能?我这么问是因为我想如果我知道原因,也许我可以使用其他工具来使它成为可能。
更新:我的主站点上有一个虚拟机管理程序,运行着 n vm。我的辅助站点上有另一个管理程序,我想将其作为主服务器的备份服务器。为了保持文件在这两者之间同步,我发现的最好方法是使用 rsync。问题是我不想在 VM 上运行我的代码 (rsync),因为我希望我的产品少代理。在这种情况下,我需要添加第三台计算机来运行代码。现在,我需要在我坚持使用的主站点和辅助站点之间进行 rsync,因为 rsync 不适用于远程到远程服务器。
ssh user@server1 "rsync /files user@server2:/directory"
Run Code Online (Sandbox Code Playgroud)
您可以使用 ssh 和 ssh 公钥/私钥,通过 rsync 安全地执行此操作。
ssh 可以使用密码或公钥/私钥对进行身份验证。在这个答案中,我将介绍如何设置 ssh 公钥/私钥对。描述 ssh-agent 转发,以及如何将它们与 rsync 一起使用来同步两台远程机器。
您可以使用 生成 ssh 密钥对ssh-keygen
,它会提示您输入密码,您需要在此处输入安全的内容。它还将生成两个文件 $HOME/.ssh/id_rsa(不要共享)和 $HOME/.ssh/id_rsa.pub。
公钥 (id_rsa.pub) 可以与任何人共享,而不必担心您的帐户会被他们盗用。如果有人掌握了您的私钥,那么他们可以对任何设置为接受您的私钥的帐户/机器进行身份验证。
这就是密码短语的用武之地,它使得如果有人得到你的私钥,他们仍然需要知道密码短语。
在登录期间 ssh 在 $HOME/.ssh/authorized_keys 中查找文件。此文件是授权用于身份验证的公钥列表。在远程机器上,您需要将 id_rsa.pub 附加到此文件。
在 ssh 尝试期间,您现在将被提示输入您的私钥而不是密码的密码。
您可以通过使用ssh-agent bash
, 后跟ssh-add
. 这首先运行带有“钥匙圈”的 bash,然后将您的钥匙添加到钥匙圈。现在,在此 shell 中,如果调用 ssh,它将从密钥环中提取您的私钥,而不是提示您输入密码。
AllowAgentForwarding yes
在远程主机上的 /etc/ssh/sshd_config 中设置。这使得您可以从您已 SSH 连接到的机器 ssh 到另一台在 Authorized_keys 中有您的公钥的机器,并且不会提示您输入密码或密码,因为它将处理返回钥匙串的通信你的源机器。
ssh 允许你在远程机器上发出命令而不给你一个 shell,如果你有上面的设置,你可以执行以下操作:
ssh user1@remote_host1 'hostname;id'
Run Code Online (Sandbox Code Playgroud)
这将在 remote_host1 上运行命令 hostname 和 id 并使用您的密钥而不提示您。它应该返回“remote_host1,user1”
您还可以演示代理转发
ssh user1@remote_host1 'ssh user2@remote_host2 "hostname;id"'
Run Code Online (Sandbox Code Playgroud)
这将user2@remote_host2 "hostname;id"
在 remote_host1 上运行 ssh ,然后 ssh 到 remote_host2 并运行它们的命令。它在代理转发开启时将身份验证请求返回给您的机器,并在不提示您的情况下使用您的密钥。它应该返回“remote_host2,user2”
您现在可以执行以下操作。
ssh remote_host1_user@remote_host1 "rsync -ave ssh source_sync_dir remote_host2_user@remote_host2:target_sync_dir"
Run Code Online (Sandbox Code Playgroud)
这告诉 remote_host1 将 host_1 上的源与 host_2 上的目标 rsync,并且 rsync 已被告知使用 ssh,它将使用您的转发密钥。
归档时间: |
|
查看次数: |
17326 次 |
最近记录: |