我遇到的问题是尝试了解 ssh 命令的端口转发的使用,如下所示。混乱是基于本地主机的使用,其中我的机器是本地主机,但它似乎可能引用远程服务器。因此,目前尚不清楚发生了什么,因此我正在寻找可以澄清下面 ssh 命令中发生的情况的信息和/或文档链接。
ssh -f myUserID@someip -L [bind_address:]port:host:hostport
- 上述详细信息取自手册: 指定本地(客户端)主机上的给定端口将转发到远程端的给定主机和端口。
关于 ssh 命令,我被告知左侧被认为是本地(客户端)。
因此,使用以下语法
ssh -f myUserID@someip -L 1234:localhost:9200
如果左侧不包含 IP,则假定 localhost 位于端口 1234?
我不知道如何解释 localhost:9200 的第二部分?
我应该如何解释上面的 ssh 命令?
[bind_address:]port:host:hostport 指定本地(客户端)主机上的给定端口将转发到远程端的给定主机和端口。这是通过分配一个套接字来侦听本地端的端口来实现的,可以选择绑定到指定的bind_address。每当与此端口建立连接时,都会通过安全通道转发连接,并从远程计算机建立与主机端口 hostport 的连接。端口转发也可以在配置文件中指定。 IPv6 地址可以使用替代语法指定:[bind_address/]port/host/hostport 或将地址括在方括号中。只有超级用户才能转发特权端口。默认情况下,本地端口根据 GatewayPorts 设置进行绑定。然而,可以使用显式的bind_address 将连接绑定到特定地址。 “localhost”的bind_address 表示侦听端口仅限本地使用,而空地址或“*”表示该端口应可从所有接口使用。
我需要澄清我发布的格式。因为定义的读取方式和命令的方式是我发布的听起来像是我将本地主机 1234 端口转发到本地主机 9200,这对于如何允许我与远程服务器通信毫无意义。
答案1
-L1234:localhost:9200
-L
:执行本地转发(从本地客户端转发到远程)1234
:在本地机器上监听tcp/1234;你正在执行的那个ssh
localhost:9200
:将流量转发到的目的地。目的地是从目标机器的角度描述的(someip
在您的示例中为“”)。所以localhost
这里的意思是someip
,9200
意思是远程机器上的 tcp/9200 。
您的本地计算机将接受端口 1234 上的连接,并将流量通过隧道传输到远程主机上的端口 9200。
请注意,目标可以是从远程可访问的任何计算机,而不仅仅是localhost
从远程的角度来看。因此,如果您想转发到可从本地计算机访问someip
但不能(直接)从本地计算机访问的计算机,则可以使用诸如
-L1234:otherip:9200
答案2
我只是快速谷歌搜索并犯规了......
https://www.howtogeek.com/168145/how-to-use-ssh-tunneling/
请通读本文并转到以下部分:
“远程端口转发:使本地资源可以在远程系统上访问”
这正是您的命令正在执行的操作。
也许下次多谷歌一下。我必须在搜索框中输入的只是 ssh“-L”,因此带有 -L 的答案将会返回。
此致
鲍勃