使用 ssh 从主机 A 通过主机 B 访问主机 C 的 localhost

Posted

技术标签:

【中文标题】使用 ssh 从主机 A 通过主机 B 访问主机 C 的 localhost【英文标题】:Access localhost of host C, from host A, via host B with ssh 【发布时间】:2017-05-01 07:32:32 【问题描述】:

对于一个项目,我必须使用 ssh 从我的计算机 (host_A) 通过另一台计算机 (host_B) 访问计算机 (host_C) 的 localhost apache 服务器。

我已经成功通过 host_B 连接到 host_C 和 host_C:

ssh username_host_C@host_C

在我的.ssh/config 文件中:

Host host_C
ProxyCommand ssh username_host_B@host_B -W %h:%p

所以我尝试使用以下命令在浏览器中创建一个 ssh 隧道以访问地址为 http://localhost:8080 的 host_C 的本地网络服务器:

ssh -L 8080:host_C:80 username_host_B@host_B -N

当我连接到http://localhost:8080/ 时它不起作用并在终端中显示:

debug1: Connection to port 8080 forwarding to host_C port 80 requested.
debug1: channel 4: new [direct-tcpip]

【问题讨论】:

“它不起作用” 它在什么方面不起作用?调试消息表明正在转发连接。你当时有什么问题?详细而具体。 这就是终端告诉我的全部内容。我的浏览器卡在“等待本地主机” 【参考方案1】:

您正在连接到 B 并尝试从那里到达 host_C:80——host_C 的公共地址上的端口 80。如果您的服务器只在 C 上的 localhost 上侦听,那将无法正常工作——您需要使用 ssh 连接到 C,然后转发到 localhost:80。类似的东西

ssh -L 8080:localhost:80 username_host_C@host_C -N

应该这样做,假设您可以连接到 host_C

【讨论】:

在 host_A 上,命令 ssh -L 8080:host_C:80 username_host_B@host_B -N 告诉我 Local connections to LOCALHOST:8080 forwarded to remote address host_C:80 然后在 host_C 上,命令 ssh -L 80:localhost:80 username_host_C@host_C -N -v 告诉我 Local connections to LOCALHOST:80 forwarded to remote address 127.0.0.1:80。我可以在 host_A 的终端上看到一个连接被转发,但在 host_C 的终端上什么也没有,并且浏览器仍然停留在“等待本地主机”。 -L 80:localhost:80 没有意义,因为它将 localhost:80 转发到 localhost:80 循环中 - 如果您已经有服务器在 localhost:80 上侦听,则应该会失败

以上是关于使用 ssh 从主机 A 通过主机 B 访问主机 C 的 localhost的主要内容,如果未能解决你的问题,请参考以下文章

ssh 代理(A主机通过B主机上网)

通过SSH秘钥登录线上MySQL数据库(基于Navicat)

shell脚本怎么实现A主机SSH到B主机,在从B主机SSH到C主机,然后在C主机执行ps -ef命令返回C主机的进程数

ssh隧道 学习总结

ssh隧道代理连接

如何通过linux ssh远程linux不用输入密码登入