将参数传递给远程 ssh 端口转发

将参数传递给远程 ssh 端口转发

我有一台远程服务器,它位于两个网关后面,如图所示。gw1向外界开放,而gw2只能从 访问gw1Server只能从 访问gw2,它可以是许多可能的服务器之一。 我想配置端口转发,ssh以便443从我的客户端计算机自动转发到2000gw1这不是问题。 我有:

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

这非常完美。现在我希望当我将转发到时,2000gw1转发到。我可以这样做:443Servergw2sshgw2

HostName gw2
LocalForward 2000 Server:443

由于服务器的 IP 每次都可能不同,我是否可以将其作为参数传递?

网络设置

答案1

假设您不关心端口 2000。您的目标实际上只是将端口 443 从客户端转发到服务器。并且假设您有主机 server1、server2、server3、... 充当服务器角色。如果您将其添加到 .ssh/config:

Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443

然后例如ssh server1将通过 gw1 连接到 gw2,并将 443 从那里转发到 server1。

其作用:ProxyCommand告诉 ssh 首先连接到 gw1,并将标准输出通过管道传输到nc gw2 22,后者将该流转发到端口 22 上的 gw2。这将创建一个隧道,用于客户端上的标准输入,通过 gw1 到 gw2:22。然后,ssh 通过该隧道打开第二个 ssh 会话到 gw2。一旦建立, 就会将LocalForward端口 443 转发到 server1(%h即您在命令行中提供的主机名)。

请参阅 man ssh_config 来了解有关 Match 和 ProxyCommand 的信息。

请注意,尽管命令是ssh server1,但这实际上只将 ssh 连接到 gw2,然后从那里转发端口 443。shell 将在 gw2 上打开,而不是 server1。因此,您可能希望ssh -N server1改为运行,以避免打开 shell,因为目标实际上只是转发端口。不幸的是,.ssh/config 中没有 -N 的等效项,但您可以添加类似的东西LocalCommand wait来实现相同的目的 - shell 将只是等待直到中断,并且没有 shell 提示符。

相关内容