通过 ssh 隧道进行 scp

通过 ssh 隧道进行 scp

我想通过 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重新连接。最简单的解决方案是建立PSSH 连接M1并在那里建立反向端口转发。

然后,您可以设置从W到 的第二条 SSH 隧道M2,以将本地数据包转发到 上的反向端口转发端口M1,然后可以使用该端口建立从W到 的隧道 SSH 连接P

解决方案 2

现在,这为整个设置增加了相当多的复杂性,使其很容易出错。更好的解决方案是在W和之间M1P以及和M2之间建立 VPN 连接。然后,您可以使用从到 的私有地址范围通过这三个隧道建立路由。要使其正常工作,您需要对 和 都具有 root 访问权限,并且您需要设置适当的防火墙,以便外部任何人都无法进入您的 VPN。M1M2WPM1M2

当然还有其他解决方案,但是您需要仔细考虑数据包如何突破所有这些封锁,然后才能根据您的工具定制实际的解决方案。

答案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将文件复制到/从中复制文件。

相关内容