我需要在两台未连接到同一网络的计算机之间传输文件。我有第三台计算机,它可以通过 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 目录中,如果成功,它会将该文件重新复制到第二台计算机,然后自行清理。由于您使用的是 && 运算符,因此每个命令仅在前一个命令成功时才会执行。