我想通过 scp 将文件从远程计算机 (W) 复制到私有主机 (P)。由于我无法直接连接到机器 W,因此我使用 ssh 隧道通过两台不同的机器(端口为 22)进行连接。我想要做的是登录机器 W,然后从那里通过 scp 将文件传输到机器 P,问题是 P 隐藏在网络中,因此当我登录机器 W 时无法指定远程主机 ip。有解决方案吗?我设法在登录机器 P 时执行此操作,但我不想每次复制文件时都记住文件路径。
答案1
按照上述说明澄清您的设置后,您的系统如下所示:
P -- R -- M1 -- M2 -- W
R
是一个 NAT 路由器,它只允许从P
到 的连接M1
,但不允许相反的方向连接,并且必须使用所有节点才能建立连接。
解决方案 1
您唯一真正的问题是路由器R
,您无法控制它,因此您必须以某种方式建立隧道以允许W
重新连接。最简单的解决方案是建立P
SSH 连接M1
并在那里建立反向端口转发。
然后,您可以设置从W
到 的第二条 SSH 隧道M2
,以将本地数据包转发到 上的反向端口转发端口M1
,然后可以使用该端口建立从W
到 的隧道 SSH 连接P
。
解决方案 2
现在,这为整个设置增加了相当多的复杂性,使其很容易出错。更好的解决方案是在W
和之间M1
、P
以及和M2
之间建立 VPN 连接。然后,您可以使用从到 的私有地址范围通过这三个隧道建立路由。要使其正常工作,您需要对 和 都具有 root 访问权限,并且您需要设置适当的防火墙,以便外部任何人都无法进入您的 VPN。M1
M2
W
P
M1
M2
当然还有其他解决方案,但是您需要仔细考虑数据包如何突破所有这些封锁,然后才能根据您的工具定制实际的解决方案。
答案2
我建议使用本地安装远程文件系统sshfs
。我不知道您的设置细节,但我可以举个例子。我使用以下命令通过远程服务器 (R1) 建立了一条通往 R1 网络上无法访问的第二台服务器 (R2) 的隧道:
ssh -fN -p 24222 user@R1 -L 2222:R2:22
我现在可以像这样连接到 R2:
ssh -p 2222 127.0.0.1
我还可以用来sshfs
从 R2 本地挂载目录:
sshfs -p 2222 127.0.0.1:/path/to/dir /mnt/mountpoint
我曾尝试使用通过一台(而不是两台)远程服务器的隧道来实现这一点,但只要隧道设置正确,我认为没有理由它不能与 3 台或更多服务器一起工作。
这并非您所要求的,但它应该是一种解决方法。在本地安装远程文件系统后,您可以使用简单的方式cp
将文件复制到/从中复制文件。