使用 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秘钥登录线上MySQL数据库(基于Navicat)
shell脚本怎么实现A主机SSH到B主机,在从B主机SSH到C主机,然后在C主机执行ps -ef命令返回C主机的进程数