两个网络之间的SCP

Jor*_*geO 12 file-transfer scp

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

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

scp root@firstcomputer:./file ./
Run Code Online (Sandbox Code Playgroud)

并用以下语句完成传输:

scp ./file root@secondcomputer:./
Run Code Online (Sandbox Code Playgroud)

但我不能只在一行中完成,如下所示:

scp root@firstcomputer:./file root@secondcomputer:./
Run Code Online (Sandbox Code Playgroud)

错误响应是

ssh: connect to host secondcomputer port 22: No route to host
lost connection
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是因为第一台计算机无法看到第二台计算机。是否有可能给 SCP 一个参数来处理运行 SCP 程序的机器是唯一可以看到两台计算机的事实?

顺便说一下,第三台计算机是带有 Lion 的 Mac,而第一台和第二台运行的是 Debian。

and*_*dol 21

scp 选项 -3 应该是您正在寻找的。把它放在你的例子中:

scp -3 root@firstcomputer:./file root@secondcomputer:./
Run Code Online (Sandbox Code Playgroud)

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


小智 4

您应该能够使用 SSH 隧道。

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

ssh -fNL 12345:remote:22 gatewaylogin@gateway
Run Code Online (Sandbox Code Playgroud)

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

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file
Run Code Online (Sandbox Code Playgroud)

我刚刚在我的网络上进行了测试,效果非常好。

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