两个网络之间的 SCP

两个网络之间的 SCP

我需要在两台未连接到同一网络的计算机之间传输文件。我有第三台计算机,它可以通过 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。

答案1

您应该能够使用 SSH 隧道。

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

ssh -fNL 12345:remote:22 gatewaylogin@gateway

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

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

我刚刚在我的网络上测试了这一点,并且它运行良好。

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

答案2

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

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

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

答案3

您可以尝试以下操作:

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

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

相关内容