我想使用 Linux 系统从 Windows 服务器下载文件。但是,我想在两者之间使用 Raspberry Pi 作为 Jump Server。
Linux 客户端(A)------> Pi-jump 服务器(B)---------->Windows 服务器(C)
我想通过 B 从 A 向 C 发送请求,因为我希望 C 获取 B 的 IP 地址而不是 A 的 IP 地址。另外,我希望 C 回复并发送一个文件。
因此,我想做:
tftp -g -t i -f $PATH_FILE $RASPBERRY_PI_IP
我需要如何配置 Pi,以便当我这样做时,我能从服务器获取文件?
我找到了这个命令并在Linux客户端中运行它:
ssh -L 8999:WINDOWS_SERVER_IP:8999 pi@RASPBERRY_PI_IP
但是,它的作用是从 Linux 客户端登录 Pi,而我想要做的只是发送下载文件的命令。
谢谢!!
答案1
设想:
您remoteserver (C)
在端口 上运行着一个服务remoteport
。您想连接到它,但您的本地计算机(A)
因某种原因被阻止访问remoteserver (C)
。remoteport
幸运的是,您有 ssh 访问权限tunnelserver (B)
,因此可以从那里访问remoteport
。remoteserver (C)
因此,您想出了tunnelserver (B)
一个好主意,使用跳转服务器:中间跳跃到remoteserver (C)
和remoteport
。
localserver (A) -> tunnelserver (B) -> remoteserver (C)
一旦隧道建立起来,您将连接到端口localserver
,localport
并通过 ,tunnelserver
最终sshport
到达。remoteserver
remoteport
A:localport -> B:sshport -> C:remoteport
解决方案:
创建 SSH 隧道的方法如下:
ssh -L <localport>:<remotehost>:<remoteport> -p <tunnelport> <tunneluser>@<tunnelserver>
tunnelserver
这将使您以用户身份登录tunneluser
;当您注销时,隧道将终止。
填写端口号:
localport
将是您在本地机器上连接的端口:选择任何可用的 TCP 端口,即尚未运行某些本地服务的端口。您将知道本地计算机上是否有 Web 服务器,因此将避免使用端口80
和443
。在 Linux 系统上,端口1
到1023
默认情况下是特权端口,这意味着只有用户root
可以在那里绑定服务(sudo
如果您还没有这样做,请在命令前面加上以克服这个问题root
)。
remoteport
remotehost
是远程服务正在侦听的端口。大多数服务都有一个默认端口(因为tftp
它是69
),如果您更改了它,您就会知道。
sshport
是 ssh 服务端口tunnelserver
:如果您没有更改它的默认值,那么22
您可以完全省略该-p <tunnelport>
参数。
运行全部内容:
假设您选择本地端口,可以通过常规8999
ssh 访问,并且您的远程 tftp 服务也在默认端口上。tunnelserver
22
69
ssh -L 8999:<remotehost>:69 <tunneluser>@<tunnelserver>
localhost
然后您将通过端口连接到远程 tftp 服务8999
:
tftp localhost 8999