图表如下
服务器 A ----> 服务器 B <----- 笔记本电脑
因此基本上服务器 A 和笔记本电脑可以直接连接到服务器 B,但是您不能直接建立从服务器 A 到笔记本电脑的连接,因此我们从服务器 A 到服务器 B 设置了一个反向 ssh 隧道,以便笔记本电脑可以通过服务器 A 设置的隧道连接到服务器 A。所以现在从笔记本电脑 ssh 到服务器 A 的问题解决了。
现在,我在服务器 A 中设置了一个应用程序,我需要通过笔记本电脑上的端口 443 访问它,我该怎么做?
答案1
猜猜你已经拥有什么:
从反向隧道开始:
serverA:~ $ ssh -R 22:localhost:10022 serverB
然后从笔记本电脑连接到服务器 B,并将本地转发连接到您在反向转发中定义的端口:
laptop:~ $ ssh -L 10023:localhost:10022 serverB
如果我理解正确的话,你已经做了类似的事情。现在来看最后一部分:
连接到本地转发中使用的端口上的 localhost,这会将所有包直接发送到 serverA,指定另一个端口转发,以便您的应用程序可以连接到 serverA
laptop:~ $ ssh -p 10023 -L 10443:localhost:443 localhost
如果您的应用程序需要连接到 443 并且不能使用其他端口(例如我在示例中使用的 10443),则您必须以 root 身份进行最后的连接:
laptop:~ $ su -
laptop:~ # ssh -p 10023 -L 443:localhost:443 user@localhost
或者
laptop:~ $ sudo ssh -p 10023 -L 443:localhost:443 user@localhost
一些解释:
- “443:localhost:443”在远程端得到解析....所以它实际上是 serverA
- “user@” 是登录 serverA 所需的用户,如果之前不需要,那么现在就需要了,因为你现在是本地 root 用户
- “localhost” 在本地解析,因此它实际上是笔记本电脑。
答案2
如果您希望服务器 B 上的 -R 转发端口可从服务器 A 访问,则需要在服务器 B 上的远程端口左侧指定绑定地址。例如,如果 B 的地址为 1.2.3.4,并且您正在从笔记本电脑连接:
laptop:~ $ ssh -R 1.2.3.4:10443:127.0.0.1:443 server-b
这会将服务器 b 上的端口 10443 转发到笔记本电脑上的端口 443。如果您想使用端口 443,请以 root 身份登录到服务器 b。
答案3
如果你有 SSH 访问权限,那么执行类似 ssh -L 8443:localhost:443 user@serverA 的操作应该可以。然后你就可以使用https://本地主机:8443连接。