两个网络之间的SCP


12

我需要在未连接到同一网络的两台计算机之间传输文件。我得到了第三台可以通过VPN看到两个网络的计算机。

在第三台计算机上,我可以执行以下操作:

scp root@firstcomputer:./file ./

并使用以下语句完成传输:

scp ./file root@secondcomputer:./

但是,我不能只在一行中做到这一点,如下所示:

scp root@firstcomputer:./file root@secondcomputer:./

错误响应是

ssh: connect to host secondcomputer port 22: No route to host
lost connection

我意识到那可能是因为第一台计算机看不到第二台计算机。是否可以给SCP一个处理以下事实的参数:运行SCP程序的计算机是唯一可以看到两台计算机的计算机?

顺便说一句,第三台计算机是一台装有Lion的Mac,第二台计算机正在运行Debian。

Answers:


3

您应该能够使用SSH隧道。

假设您尝试将文件从远程计算机(“远程”)传输到本地计算机(“ local”),请通过在本地计算机上键入以下内容通过第三台计算机(“ gateway”)建立隧道:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

然后,您可以在此隧道上运行无限数量的SCP命令(仍在本地计算机上键入):

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file

我刚刚在我的网络上对其进行了测试,并且效果很好。

如果远程网络是安全的,则上述方法很好,但是如果它不是安全的,则需要在本地和网关之间建立一个隧道,并在网关和远程之间建立另一个隧道,并通过一个公共端口号将两者链接起来。


21

scp选项-3应该是您要寻找的。放在您的示例中:

scp -3 root@firstcomputer:./file root@secondcomputer:./

请注意,-3选项最初是在2011年初发布的OpenSSH 5.7中引入的。


我执行comand时我的scp没有实现-3,我得到了scp:非法选项-3用法:scp [-1246BCEpqrv] ...
JorgeO 2011年

1
没错 -3仅在最新版本的OpenSSH中可用,我不确定Debian是否已实现。
Rilindo

啊,对此感到抱歉。更新了有关版本要求的答案。
andol 2011年

1

您可以尝试以下方法:

root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file

这会将文件复制到第三台计算机上的/ tmp目录中,如果成功,它将重新将该文件复制到第二台计算机上,然后自行清理。由于使用的是&&运算符,因此每个命令仅在上一个命令成功执行后才会执行。


不了解&&运算符。比使用好;
JorgeO 2011年

这与在第一个示例中使用的原始技术相同,该技术试图避免(从计算机A复制到本地计算机,然后将本地文件复制到计算机B)。
杰森·C
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.