HTTPS SSH隧道

好的,我有一台网页服务器,我们称之为A服务器,通过HTTPS提供服务。还有一台SSH网关服务器,我们称之为B服务器。

由于防火墙规则,我无法从我的桌面Linux电脑访问A服务器上的网页服务。因此,为了查看网页服务,我必须通过SSH进行X Forwarding到B服务器,并通过SSH隧道运行Firefox。B服务器可以访问A服务器的网页服务,所以这样可以正常工作。

我想知道是否有可能在我的个人电脑和B服务器之间创建一个SSH隧道,以便我能够使用桌面上的Web浏览器访问A服务器上的服务,而不是通过SSH隧道运行Firefox。

2个回答

是的,这是可能的: ssh -L 8443:serverA:443 -Nf [user@] 这将允许您将桌面浏览器指向端口8443,并将其发送到服务器A上的端口443(HTTPS端口)。-Nf选项将会话放入后台并立即返回到您的桌面,而不会建立与服务器B的实际shell会话。

1你也可以直接连接到服务器A:ssh -L 8443:localhost:443 -Nf [user@]<serverA> - John
HTTPS端口不是443吗? - clement
对...感觉现在很愚蠢...抱歉。我会进行修改的。老实说,我真不知道我从哪里得到了437这个数字... - John
由于防火墙限制,我无法直接访问A服务器。而且很抱歉,上述方法对我来说不起作用,我收到了这个错误信息:channel 2: open failed: administratively prohibited: open failed。我猜测B服务器已禁用了AllowTCPForwarding - Jacob Tomlinson
你在哪台机器上运行这个命令?是在个人电脑上吗?还是在服务器A上? - krupan
@krupan 来自电脑。 - arauzo
当我尝试使用这些隧道时,我遇到了几个错误。当我尝试远程连接我的路由器时,出现了400错误请求。如果我尝试连接公共服务器,比如Google或www.eldiario.es,会出现一些混乱,我会得到404错误或未知域名...(我猜这是因为一个网络服务器为多个域名提供虚拟名称)。 - arauzo
这一直让我感到困惑:ssh -L 8443:serverA:443 -Nf [user@]<serverB>实际上通过 serverB 将本地主机的 8443 转发到 serverA 的 443 端口,作为“SSH跳板服务器”。我总是觉得这很不直观... - Jean-Philippe Pellet
所以我猜测通过http将浏览器指向'localhost:8443'是正确的吗?但是它给了我一个"Bad request. You're speaking plain HTTP to an SSL-enabled server port."的错误。但是使用https也不是一个选项。或者说,是吗? - untill

你甚至不需要使用SSH隧道来访问Server A中的Web服务。你可以使用动态端口转发。
ssh -N -D 9000 user@server_b

并配置您的Web浏览器使用SOCKS代理主机127.0.0.1和端口9000


他很可能需要创建一些代理例外,因为对于所有事情都使用代理将无法让他访问到服务器B无法访问的资源。根据他工作网络的复杂程度,尝试使用代理可能会比它所值得的努力更多。 - John
我同意,约翰。我只是想指出,使用“动态端口转发”也是可行的 :) - clement
你在哪台机器上运行这个命令?电脑?服务器A? - krupan
试过了。在电脑上运行这个命令。 - krupan