不在同一网络中的两个服务器之间的scp


13

我可以使用2个不同的VPN连接访问两台服务器。我设法在我的机器上同时运行两个VPN(一些路由规则)。

我想scp <remote1>:some/file <remote2>:destination/folder从我的笔记本电脑终端上进行操作。但是,当我尝试这样做时,scpremote1上调用的命令无法找到remote2,因为它们不在同一网络中。是否可以强制该scp命令作为路由器通过我的笔记本电脑?

如果我尝试使用Nautilus(连接到服务器,两个服务器,然后复制粘贴),它都可以工作,但是我想从终端上进行。


是您的机器与remote1remote2都联系。您确定错误是remote1无法访问remote2吗?
2014年

是的,错误是ssh:无法解析主机名<remote2>:名称或服务未知,连接丢失
Danduk82 2014年

而且,如果我尝试直接将IP地址用于<remote2>,则一段时间后(环聊)连接会失败。
Danduk82 2014年

然后,我猜这是您的计算机无法连接到remote2。VPN连接可能超时或不稳定……
1

不行,即使DNS也行。我真的有一种感觉,scp命令尝试直接在remote1上执行remote1remote2之间的连接。
Danduk82 2014年

Answers:


34

较新的scp版本具有-3选项

-3

Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts

大!正是我所需要的。非常感谢
Danduk82

1
很棒的发现,我不知道!
1

9

如果您需要比更大的灵活性scp -3,那么Plain ssh和Pipes很有趣。

这等效于通过本地计算机重定向流:

ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'

然后,您可以随时添加更多的流重定向,例如链接多台中间计算机,或者在路由传输文件时保存其本地副本。


2
如果已pv安装源计算机,并cat用它替换了第一台计算机,则将获得一个不错的进度条。
liori 2014年

6

扩展@Anko的答案,您可以使用tar多个文件:

ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'

压缩是完全可选的-您的数据可能无法很好地压缩或太大,无法保证开销。如果您的版本tar不支持该-z开关,请分别通过gzip -c和进行传递gzip -dc

PS:提防那些版本tar不会在提取时去除前导斜线(即,如果提供,则写入绝对路径名)。

编辑:-e none管道不需要,因为没有分配伪终端。


1
ssh具有-C用于启用流压缩的标志。根据man-page,它使用与以前相同的算法gzip。手册页还有助于阐明何时使用它:“在调制解调器线路和其他慢速连接上需要压缩,但在快速网络上只会降低速度。”
Anko

4
@Anko,使用-C此处的问题是本地计算机将必须解压缩并重新压缩数据。告诉tar进行压缩意味着压缩后的数据直接通过管道,而无需任何处理。
cjm 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.