参考:
如何进行多跳 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
我还可以直接将内容从 rsync 复制vpnserver
到我的本地计算机,也可以将内容从我的本地计算机复制到targetserver
(使用通过的 ssh 代理jumphostserver
)
我需要做的是让我的机器以允许的方式充当中介scp -3
,但使用rsync
,以便权限、所有权以及(更重要的是) ACL 被正确复制到targetserver
。
我曾考虑尝试 NFS 导出vpnserver
和的文件系统targetserver
(通过重新导出jumphostserver
),但我无法控制jumphostserver
,只能控制vpnserver
和targetserver
。
答案1
如果存在网络连接,则这两个主机中的其中一个可以登录到另一个主机,要么使用其中一个主机上的 SSH ID 密钥在另一台主机上的 authorized_keys 中识别,要么使用密码,并且如果端口转发未被禁用,并且如果通过本地机器运行此流量是可以的,那么这几乎总是可以通过端口转发来完成。
假设您的本地机器为主机 A,并且主机 B 拥有使用 SSH 登录主机 C 的凭证,只要它能够到达主机 C。
使用执行反向端口转发的选项登录到主机 B,监听计算机 B 上的端口 2222 并连接到本地主机上的端口 3333(这将在计算机 A 上发生)。在 Linux 上,此选项为“-R 2222:本地主机:3333“。
使用常规端口转发登录到主机 C,监听机器 A 上的端口 3333 并连接到本地主机上的端口 22(这将在机器 C 上发生)。在 Linux 上,此选项为“-L 3333:本地主机:22“。
在主机 B 上启动到主机 C 的测试 SSH 会话,以查看是否所有设置都正确。要执行的命令是“ssh -p2222 用户名onhostc@localhost“。如果所有设置都正确,它将连接到 B 上的端口 2222,转发到 A 上的端口 3333,然后转发到 C 上的端口 22。如果您的密钥正确,您可以直接登录。否则,您应该会收到密码提示。输入密码以确保无误。
如果可以正常连接,请关闭该测试连接,然后继续执行下面的#4 或#5。
要将文件从 B 发送到 C,请在 B 上执行以下操作: rsync -e "ssh -p2222" -av /其中/到/获取/文件/.usernameonhostc@localhost:/其中/到/放置/文件
要将文件从 C 发送到 B,请在 B 上执行以下操作:rsync -e“ssh -p2222" -av usernameonhostc@localhost:/where/to/get/files/. /where/to/put/files
如果您需要通过互联网在机器之间传输大量数据,因为您的本地访问带宽有限,那么它将变得更加复杂,需要了解 B 和 C 上的网络限制,甚至可能无法实现。
将字符串“useronhostc”替换为您在主机 C 上使用的用户名。保留“localhost”原样或仅将其更改为“127.0.0.1”。为所示示例提供正确的路径。删除“/。” 如果它只是一个文件,则位于源路径末尾。
请记住,您必须同时登录 B 和 C(从 A)。建议使用单独的 xterminal 窗口。这些 ssh 登录都将进行端口转发。但您也可以通过它们执行命令。您可以选择除示例中所示的 2222 或 333 之外的其他端口号。除非主机 C 出于某种原因监听不同的端口(我对我的服务器这样做...我没有告诉您哪个端口),否则可能需要端口 22。如果您更改端口 2222 和/或 3333,您可能必须使用 1024 或更大的数字。从技术上讲,您甚至可以对两者使用相同的数字,因为监听是在不同的机器上。
答案2
如果两个系统都可以访问互联网,你可以安装来自 ntop 的 n2n 包在系统之间创建主机到主机的 VPN 链接。