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

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

我可以通过 2 个不同的 VPN 连接访问两台服务器。我已经设法让两个 VPN 在我的机器上同时工作(一些路由规则)。

我想scp <remote1>:some/file <remote2>:destination/folder从我的笔记本电脑终端做一个。但是当我尝试这个时,scp调用的命令远程1找不到远程2因为他们不在同一个网络。是否可以强制scp命令通过我的笔记本电脑作为路由器?

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

答案1

较新版本的 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

答案2

如果您需要比 更大的灵活性scp -3,普通ssh和管道会很有趣。

这相当于在本地计算机上重定向流:

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

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

答案3

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

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

压缩完全是可选的 - 您的数据可能不太可压缩或大到不足以保证开销。如果您的版本tar不支持该-z开关,请分别通过管道gzip -cgzip -dc

PS:请注意,tar该版本不会在提取时删除前导斜杠(即写入绝对路径名(如果提供))。

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

相关内容