我可以通过 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 -c
和gzip -dc
。
PS:请注意,tar
该版本不会在提取时删除前导斜杠(即写入绝对路径名(如果提供))。
编辑:-e none
管道不需要,因为未分配伪终端。