代理 SSH 连接

代理 SSH 连接

如果之前有人问过这个问题,我很抱歉,但我目前正在尝试寻找一种解决方案,让我们能够以类似于 RDP 网关的工作方式建立 SSH 连接。对于那些不熟悉的人,RDP 网关允许您通过另一台服务器代理 RDP 连接。远程桌面将透明地与 RDP 网关服务器进行身份验证,并从那里建立与端点服务器的连接,允许您通过私有 IP 地址或内部 DNS 名称引用端点服务器,从而限制您的暴露。

目前我的想法是通过 SSH 设置端口转发,这样我们需要访问隧道代理后面的每台服务器都在由中间点服务器转发的不同端口上。然而,这似乎不是一个最佳解决方案,所以我想知道是否有更好的方法来做到这一点。

答案1

在 SSH 术语中,你经常谈论的是堡垒主机或者跳转服务器- 一台机器(通常在您的 DMZ 中),接受传入的 SSH 连接,然后您可以从它与您管理的实际系统建立 SSH 连接。

                                                                             ==> | Server1 |
 _________                             ___________                         /      ---------
| user PC |   ===(SSH on port 22)===> | jump host |  ===(SSH on port 22)== ==+>  | Server2 | 
 _________                             ___________                         \      _________
                                                                             ==> | Server3 |

通常为了提高安全性,跳转服务器将需要双因素身份验证和/或仅在建立 VPN 连接后接受传入的 SSH 会话。

无需先登录到跳转主机并从命令提示符启动第二个 SSH 会话,OpenSSH 允许您在单个命令中配置该会话

我更喜欢在我的配置文件中明确设置所有设置,~/.ssh/config并为每台主机指定一个简短的别名。这样我就不需要使用任何命令行标志,只需输入 less 即可ssh Destination完成。

Host jumphost
    Hostname jumphost.example.com
    User serverfault
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X 
    IdentityFile ~/.ssh/id_rsa.jumphost

Host server1
    Hostname server1.int.example.com
    User hbruijn 
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X
    IdentityFile ~/.ssh/id_rsa.int.example.com
    ProxyJump jumphost

ProxyJump是一个相对较新的设置,我发现它比 更直观ProxyCommand。现在ssh server1将执行您所需的操作,首先创建一个会话,使用[email protected]作为第一跳,然后从该会话通过隧道传输到下一跳,可选地使用不同的 ssh 密钥和不同的用户名[email protected]

您也可以直接从命令行使用 ProxyJump 命令:

ssh -J [email protected] [email protected]

另一种方法讨论于此问答

答案2

规范的解决方案是部署 IPv6(和/或 VPN)并从一开始就避免这种解决方法,但如果您现在无法做到这一点,那么它就被称为跳转箱或堡垒主机或类似术语。它只是您放置的一台机器,您的用户可以使用 ssh 登录,然后通过 ssh 进一步进入该盒子可以访问网络的内部主机。该ssh命令甚至有一个命令行选项,可以自动通过跳转主机进行连接。

     -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.

相关内容