ssh 隧道:监听 ssh 服务器

ssh 隧道:监听 ssh 服务器

以下是我想做的事情:

ssh me@server1 4000:server2:4000

使用此命令,我可以通过连接到 localhost:4000 来连接到 server2:4000

我想要做的是连接到 server1:4000 有没有办法做到这一点?

谢谢

答案1

我希望你的例子看起来像ssh -L 4000:server2:4000 me@server1

有几种方法可以解释您的问题:

  • 使用端口 4000 连接到 server1 上的 SSH 服务器:ssh -p 4000 me@server1
  • 从一个 SSH 连接跳转到另一个:ssh -J localhost:4000 me@server1
  • 将服务器本地端口转发给您:ssh -L 4000:localhost:4000 me@server1

如果服务不监听其服务器的本地主机,则可能需要指定不同的名称或 IP。大多数服务监听 0.0.0.0(每个 IP),因此这无关紧要。有些服务只监听本地主机。您应该看到我的第三个示例与我重写的示例有多么相似。它执行相同的操作,但使用不同的主机(本地主机)。

如果您想要使其永久生效,您可以将其添加到您的~/.ssh/config并取消注释与您期望的操作相匹配的行:

Host server1
  User me
  # directly connect to port 4000
  #Port 4000
  # proxy through port 22 to port 4000
  #ProxyJump localhost:4000
  # forward port 4000 to localhost
  #LocalForward 4000:localhost:4000

然后您只需运行即可ssh server1连接。

命令行文档(更多信息请见man ssh):

-J destination

通过首先与 描述的跳转主机建立 ssh 连接destination,然后从那里建立到最终目的地的 TCP 转发,连接到目标主机。可以指定多个跳转点,以逗号分隔。这是指定ProxyJump配置指令的快捷方式。请注意,命令行上提供的配置指令通常适用于目标主机,而不是任何指定的跳转主机。用于~/.ssh/config指定跳转主机的配置。

-L [bind_address:]port:host:hostport

指定将与本地(客户端)主机上给定 TCP 端口或 Unix 套接字的连接转发到远程端的给定主机和端口或 Unix 套接字。这通过分配套接字来监听本地端的 TCP 端口(可选地绑定到指定的 )或 Unix 套接字来实现。每当与本地端口或套接字建立连接时,该连接都会通过安全通道转发,并从远程计算机与主机端口或 Unix 套接字bind_address建立连接。hostportremote_socket

配置文档(节选;更多信息请见man ssh_config):

代理跳转

将一个或多个跳转代理指定为 [ user@] host[: port] 或 ssh URI。多个代理可以用逗号分隔,并将按顺序访问。设置此选项将导致 ssh(1) 连接到目标主机,首先与指定的 ProxyJump 主机建立 ssh(1) 连接,然后从那里建立到最终目标的 TCP 转发。

本地转发

指定本地计算机上的 TCP 端口通过安全通道从远程计算机转发到指定的主机和端口。第一个参数指定侦听器,可以是 [ bind_address:]port或 Unix 域套接字路径。第二个参数是目标,可以是host:hostport或 Unix 域套接字路径(如果远程主机支持)。

相关内容