31、【Ubuntu】【远程开发】内网穿透:反向隧道建立(三)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【远程开发】内网穿透:反向隧道建立(二)

分析了 SSH -R 选项的剩下关键内容,并开始分析 sshd_config 中的关键配置项 GatewayPorts,下面继续

内网穿透

下面回到 sshd_config 配置项 GatewayPorts 继续分析

  • 默认情况下,SSH 服务进程 sshd 会把 ssh -R 选项创建的监听端口绑定到回环地址 127.0.0.1,只有服务器自己能连这个端口,外网无法访问,遵循的默认最小权限的安全设计原则,防止用户无意中把内网服务暴露到公网,是一个安全防护机制
  • 如果想让外网也能这些转发端口,就需要显式启用 GatewayPorts 选项 ,启用后,sshd 才会允许将监听地址绑定到非回环地址上,比如 0.0.0.0 或其他公网 IP 等,这样其他主机就有连接机会了

这里面 GatewayPorts 配置项有三个可选参数:

  • no这也是默认参数 ,强制所有 ssh -R 转发只能绑定到回环地址 127.0.0.1,外网无法访问,只有服务器本机可用,很安全,适合内部调试用
  • yes强制所有的 ssh -R 转发都绑定到 *,也就是 0.0.0.0 所有 ssh -R 的端口自动对公网开放,所有 IP 都能访问,简单但风险高,不推荐
  • clientspecified:允许客户端通过 ssh -R [bind_address:]... 指定绑定地址,客户端可自由选择是否对公网开放,推荐这种方式,灵活可控

这里再强调下 GatewayPorts yesGatewayPorts clientspecified 的区别,yes 是强制行为 ,服务端强制决定所有客户端的 ssh -R 请求自动绑定到 *0.0.0.0 接口上,也就是所有用户的 ssh -R 都会被暴露到公网上,即使有客户端不想暴露,只想在服务器上本地用也不行,也会被服务端强制公开clientspecified 会尊重客户端的意愿 ,除非客户端显式写 bind_address,否则就默认只绑定服务器的回环地址 127.0.0.1yes的安全性较低,只适合内部可信环境,或测试服务器,用来内网穿透,而且是长期使用,还是选 clientspecified 更安全

OK,下面来就来配置云服务器,之前 blog 【Ubuntu】【远程开发】内网穿透:环境准备 已经介绍了云服务器的一些信息,下面进入云服务器控制台,在终端输入

bash 复制代码
sudo vim /etc/ssh/sshd_config

root 权限编辑 sshd_config 配置文件,找到 GatewayPorts 配置项(应该默认是 no),给他设置成 GatewayPorts clientspecified

另外,这里再最后说下 ssh 命令的格式,在

bash 复制代码
ssh -N -v -R 云服务器端口:localhost:本地端口 云服务器用户名@云服务器ip

之中,前面的选项都说完了,还剩最后的 用户@ip,打开终端,输入 man ssh,可以查看 ssh 命令描述如下

可以看到,ssh 命令中唯一一个必选项就是 destination,其格式描述在 DESCRIPTION 部分,可以看到,必选项 destination 就是 [user@]hostname,这里用户名 user@ 是可选项,(如果不写,会默认使用当前本地用户名或配置文件中的默认用户 ),这里 manual 手册没有提到(本地试下就会发现,这里就不演示了),手册的维护者倾向于让手册更简洁,应该是假设用户已了解了基本 Unix 行为,就比如现在的场景,不指定用户就默认用当前用户

最后,在云服务器的防火墙上开放反向隧道要指定的端口访问 ,点击服务器面板上的防火墙规则

点击添加规则

按照自己 ssh -R 指定的端口设置规则

ok,现在在终端输入

bash 复制代码
ssh -N -v -R 0.0.0.0:ServerPort:localhost:22 ServerUser@ServerIp

应该可以看到反向隧道建立成功


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog

相关推荐
lingran__10 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
各类产品分享11 小时前
电力行业AR智能运维哪个品牌好
运维·ar·ar巡检
Dlrb121111 小时前
Linux驱动---sys文件系统自动添加设备节点、添加调试节点以及MISC设备驱动的解释
linux·imx6ull·misc·设备节点·sys文件系统
贾天佑忆月 迷失的昵11 小时前
客户端与服务器持续同步解析(轮询,comet,WebSocket)
运维·服务器·websocket
刘某的Cloud11 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower11 小时前
Linux 性能排查分析完全教程
linux·运维
zhangfeng113312 小时前
宝塔8 升级到 11导致 服务器无法访问外网dns失效了,无法访问bt.cn 解决方法 测试通过
运维·服务器
兵bing13 小时前
Docker Compose 配置文件归纳总结-千问
运维·docker·容器
dok1213 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
INNOVIX稳石机器人13 小时前
从“存得下”到“管得活”:稳石四向穿梭车如何重塑密集仓储新逻辑?
大数据·运维