以下是我想做的事情:
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
建立连接。hostport
remote_socket
配置文档(节选;更多信息请见man ssh_config
):
代理跳转
将一个或多个跳转代理指定为 [
user
@]host
[:port
] 或 ssh URI。多个代理可以用逗号分隔,并将按顺序访问。设置此选项将导致 ssh(1) 连接到目标主机,首先与指定的 ProxyJump 主机建立 ssh(1) 连接,然后从那里建立到最终目标的 TCP 转发。
本地转发
指定本地计算机上的 TCP 端口通过安全通道从远程计算机转发到指定的主机和端口。第一个参数指定侦听器,可以是 [
bind_address
:]port
或 Unix 域套接字路径。第二个参数是目标,可以是host
:hostport
或 Unix 域套接字路径(如果远程主机支持)。