ssh远端端口转发的一个问题和解决方法
现在假设有主机local_A, 主机remote_B, remote_B可以被外界访问,而local_A不行。
这种情况下,我们可以通过ssh的远端端口转发的功能,来实现外界访问local_A的特定端口。在local_A上执行下面的命令为向外界暴露local_A的80端口,
ssh -f -N -R 8080:localhost:80 zwl@remote_B
-f
表示在backgroud运行,-N
表示只做隧道建立的连接,并不登录交互式bash,-R
后面的参数表示当有访问remote_B的8080端口的时候,信息转给local_A, localA发给他看到的localhost:80
端口。理论上,到这里我们在任意的一个可以连接remote_B的浏览器上输入,http://remote_B:8080/
即可连接到local_A上的80端口,并显示其中的网页。但一顿操作猛如虎,看到的却是无法连接。
这里说一下排查问题的过程。
sudo lsof -i TCP:8080
看到的是localhost:8080
端口被使用。问题就出在这,这里应该显示被使用的端口是*:8080
,前者表示你仅仅能在remote_B上连接这个端口,即local_A。
查过之后,发现解决方案是:需要配置remote_B上的/etc/ssh/sshd_config
中的GatewayPorts yes
。修改后重启sshd,问题解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律