使用 rsync 或 scp 在 SSH 的多个级别或跃点上复制文件

Posted

技术标签:

【中文标题】使用 rsync 或 scp 在 SSH 的多个级别或跃点上复制文件【英文标题】:Copy file with rsync or scp over multiple level or hops of SSH 【发布时间】:2016-02-09 11:29:30 【问题描述】:

我需要将大约 4.2 GB 的文件从我的 local computer 传输到 server B。但是要 ssh 到服务器 B,我需要 ssh 到 server A

目前我正在将文件从local computer 复制到服务器 A,然后从 server A 复制到 server B

所以流程是这样的:

rsync -avz --del ~/Desktop/abc/ <my-user-name>@<server-A>:~/abc

rsync -avz --del ~/Desktop/abc/ <my-user-name>@<server-B>:~/abc

这很慢,并且复制 4.2 GB 数据两次而不是一次!

我可以将带有rsync 的文件从本地计算机直接传输到server B 吗?

【问题讨论】:

"复制 4.2 GB 数据两次而不是一次!"好吧,由于您通过服务器 A 进行路由,因此您将始终“两次”传输数据,一次从本地传输到服务器 A,一次从服务器 A 传输到服务器 B(它们是否可以同时传输是另一个问题)。这就是路由的本质。 【参考方案1】:

是的,您可以直接复制文件(甚至文件夹),而无需在 联系人/登录服务器上进行任何中间副本,默认情况下,该服务器是外界已知的机器,或 联系以访问特定的本地网络。

下面是使用scp 的简单演示,没有任何不必要的复杂性。在本地机器上,只需执行以下操作:

$ scp -r -o ProxyCommand="ssh -W %h:%p your_username@contact-server.de" your_username@machine_name:/file/path/on/this/machine   ~/destination/path/to/save/the/copied/folder
-r 选项指示 scp 复制整个文件夹的内容。 your_username 在两台机器上不必相同。

如果成功,您将被要求在两台机器上输入您的密码以进行身份​​验证。

在上述命令中,假设访问名为“machine_name”的机器的典型方式是通过联系服务器。


注意: 上述命令也适用于将数据从源远程机器(例如s)传输到目标远程机器(比如t)。在这种情况下,首先ssh 到源远程计算机 (s) 并导航到数据所在的路径。之后,您可以简单地将远程机器视为/对待本地/源机器,然后简单地使用上面列出的相同scp 命令来复制文件夹。

要复制单个文件,只需删除 -r 选项并提供要复制的特定文件的路径。

【讨论】:

【参考方案2】:

你想要的是使用 port-forwardingserver 转发 ssh/rsync 端口(通常是端口 22) B 服务器 A 上的备用端口,因此当您调用 rsync -e "ssh -p altport" serverA:/sourcedir /destdir 时,您实际上是从 serverB 调用 rsync。

StackExchange 和其他网站上有许多不错的操作指南。例如:

How to forward a port from one machine to another?How To Forward Ports through a Linux Gateway with Iptables

会让你开始。使用端口转发,您实际上是在使用 serverA 作为直通主机,因此您只需传输一次 4.2G。

【讨论】:

【参考方案3】:

您始终可以将ssh 与代理命令一起使用,这样您就可以透明地传输文件。使用这个配置(~/.ssh/config):

Host <server-A>
    User <user-A>

Host <server-B>
    User <user-B>
    ProxyCommand ssh <server-A> -W %h:%p

你可以调用你的 rsync:

rsync -avz --del ~/Desktop/abc/ <server-B>:~/abc

数据将仅通过中间主机“路由”。

【讨论】:

以上是关于使用 rsync 或 scp 在 SSH 的多个级别或跃点上复制文件的主要内容,如果未能解决你的问题,请参考以下文章

三十 rsync工具介绍rsync常用选项rsync通过ssh同步

linux rsync同步工具

unix主机文件传输scp的使用

linux下ssh远程登录/scp远程复制文件/rsync远程同步命令的自动登录

Rsync服务搭建

上G文件双机互传首选工具BBCP