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

相关推荐
wb1892 小时前
docker-ce容器技术重习
运维·笔记·docker·容器·云计算
jiayong232 小时前
第 4 课:怎么把一个大页面拆成多个组件
运维·服务器·前端
qq_8573058192 小时前
ubuntu 22 源码安装bochs
linux·运维·ubuntu
A-刘晨阳2 小时前
麒麟v10桌面版2403版本运行程序提示权限不足(KYSEC)
运维·云计算·操作系统·银河麒麟·麒麟桌面系统
Zhu7582 小时前
【软件更新】在Ubuntu24 LTS中更新openssl到指定版本,例如openssl3.5.6 LTS
linux·ssh·ssl
ALINX技术博客2 小时前
【黑金云课堂】VMware Ubuntu 开发环境安装教程
linux·fpga开发·fpga
charlie1145141912 小时前
嵌入式Linux模块开发——struct module 深度解析:内核模块的核心数据结构
linux·开发语言·数据结构·c
恒创科技HK2 小时前
恒创科技:刚交付的香港云服务器应该做哪些测试
运维·服务器
刘某的Cloud2 小时前
svc中外部流量访问限制
linux·运维·docker·kubernetes·service
code monkey.2 小时前
【寻找Linux的奥秘】Linux 基础 IO 全解析:从 C 库到内核,吃透文件操作的底层逻辑
linux·c语言·基础io