参考:
如何进行多跳 SCP 传输?
https://stackoverflow.com/questions/732039/rsyncing-files-between-two-remote-servers-get-errors-stating-rsync-command-not
http://ubuntuforums.org/showthread.php?t=748431
我有一种情况,我真的希望有一个解决方案,尽管在过去的几个小时里我还没有找到任何东西。
我有两台无法相互通信的服务器,我需要在它们之间传输数据。这是一种相当普遍的情况,可以通过一些 scp 技巧轻松克服。这是陷阱。
一台服务器通过 VPN 访问,vpnserver
另一台服务器targetserver
通过跳转主机访问jumphostserver
。
我已ProxyCommand
设置为允许我通过代理连接到jumphostserver
,targetserver
并且我正在使用 SSH Mux 东西 ( ControlMaster
/ ControlPersist
/ ControlPath
) 允许所有打开的连接共享连接。
我的本地机器可以使用以下命令在两台服务器之间正确地进行 scp 操作:
scp -3 vpnserver:/path/to/file targetserver:/path/to/destination
我还可以直接从vpnserver
我的本地机器和从我的本地机器 rsync 东西到targetserver
(使用通过的 ssh 代理jumphostserver
)
我需要做的是让我的机器按照允许的方式充当中介scp -3
,但是使用rsync
, 以便将权限、所有权和(更重要的)ACL 正确复制到targetserver
.
我曾考虑尝试 NFS 导出vpnserver
和targetserver
(通过 重新导出jumphostserver
)的文件系统,但我无法控制jumphostserver
,只能控制vpnserver
和targetserver
。
如果在存在网络连接的情况下这两台主机中的一台可以登录另一台主机,或者在另一台主机上使用 authorized_keys 中识别的 SSH ID 密钥,或者可以使用密码,并且如果未禁用端口转发,并且如果通过你的本地机器运行这个流量是可以的,然后这几乎总是可以通过端口转发来完成。
让我们称您的本地机器为主机 A,主机 B 拥有使用 SSH 登录主机 C 的凭据,前提是它可以访问主机 C。
登录主机 B,使用选项进行反向端口转发,侦听机器 B 上的端口 2222 并连接到本地主机上的端口 3333(这将发生在机器 A 上)。在 Linux 上,此选项为“ -R 2222:localhost:3333 ”。
使用正常的端口转发登录到主机 C,监听机器 A 上的端口 3333 并连接本地主机上的 tp 端口 22(这将发生在机器 C 上)。在 Linux 上,此选项为“ -L 3333:localhost:22 ”。
在主机 B 上启动到主机 C 的测试 SSH 会话,以查看是否一切设置正确。要执行的命令是“ ssh -p2222 usernameonhostc@localhost ”。如果一切设置正确,它将连接到 B 的 2222 端口,转发到 A 的 3333 端口,然后转发到 C 的 22 端口。如果你的密钥正确,你就可以登录了。否则你应该得到一个密码提示。输入密码以确保。
如果可以正常连接,请关闭该测试连接,然后继续下面的#4 或#5。
要将文件从 B 发送到 C,请在 B 上执行此操作: rsync -e "ssh -p2222" -av /where/to/get/files/。usernameonhostc@localhost:/where/to/put/files
要将文件从 C 发送到 B,请在 B 上执行此操作:rsync -e " ssh -p2222" -av usernameonhostc@localhost:/where/to/get/files/。/哪里/到/放/文件
如果你需要通过互联网在机器之间传输非常大量的数据,因为你的本地访问带宽有限,那么它会更复杂,需要知道网络在 B 和 C 上是如何被限制的,甚至可能是不可能的。
用您在主机 C 上使用的用户名替换字符串“useronhostc”。保留“localhost”原样或仅将其更改为“127.0.0.1”。为显示的示例提供正确的路径。如果它只是单个文件,请删除源路径末尾的“ /. ”。
请记住,您必须同时登录 B 和 C(从 A)。建议使用单独的 xterminal 窗口。这些 ssh 登录都将进行端口转发。但您也可以通过它们执行命令。您可以选择与示例所示的 2222 或 333 不同的端口号。端口 22 可能是必需的,除非主机 C 出于某种原因在不同的端口上侦听(我用我的服务器这样做......我没有告诉哪个端口)。如果您更改端口 2222 和/或 3333,您可能必须使用 1024 或以上的数字。从技术上讲,您甚至可以对两者使用相同的数字,因为侦听是在不同的机器上进行的。
如果两个系统都可以访问互联网,您可以从 ntop 安装 n2n 包以在系统之间创建主机到主机的 VPN 链接。