有没有办法设置 ssh 网关服务器?我想设置一种无需使用端口号即可从互联网远程连接到局域网上的特定 Linux shell 的方法。例如,登录将如下所示
ssh server1.domain.com
或者
ssh server2.domain.com
而不是
ssh domain.com:(portnumber)
将端口转发映射(portnumber)
到服务器私有 IP 地址的端口 22
每台服务器都有一个私有 IP 地址并共享公共 IP。
谢谢
答案1
按照您描述的方式这是不可能的,因为它ssh
没有使用任何域和子域的概念(主机名不是协议的一部分,因为它是 HTTP 的一部分)。它仅使用主机名来获取 IP 地址并使用它(当然还有端口)。您的概念只有在您有公共 IP 地址列表时才会起作用,而当您问这个问题时您可能没有。
这种情况通常使用jumpbox
服务器来解决,您可以使用公共 IP 进行连接,然后从那里看到本地网络(可能带有本地 DNS 名称)。这需要使用,例如:
ssh -t jumpbox ssh anotherhost.localdomain
但可以使用ProxyCommand
客户端配置来简化:
Host *.localdomain
ProxyCommand ssh -W %h:%p jumpbox
然后与远程节点的连接是透明的。当你输入
ssh anotherhost.localdomain
它将带你到目标主机jumpbox
。
答案2
以下是设置 SSH 网关服务器的命令:
$ ssh -L 2222:secureserver:22 user@gateway cat -
出现提示时输入密码(但无论如何,您实际上应该使用公钥认证)。之后,在另一个终端中,使用此密码连接到安全服务器。
$ ssh -p 2222 user2@localhost
就是这样。现在您可以使用 ssh、scp 或任何其他命令通过网关直接与安全服务器通信。您只需运行第一个命令一次并使其在隐藏终端中保持运行。
答案3
您还可以使用-J
/ ProxyJump
:
-J destination Connect to the target host by first making a ssh connection to the jump host described by destination and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive. Note that configuration directives supplied on the command-line generally apply to the destination host and not any specified jump hosts. Use ~/.ssh/config to specify configuration for jump hosts.