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

相关推荐
前端精髓3 分钟前
调用大模型API
运维·服务器·microsoft
跨境小彭1 小时前
Temu 全托管模式下,SKU 利润核算的实践复盘
大数据·运维·人工智能·自动化·temu
李纲明1 小时前
WordPress 定时发布不跑、备份邮件延误:先核 WP-Cron 触发与回环,再改系统 Cron
运维·wordpress·定时任务·devdiy·wp-cron
chushiyunen1 小时前
autoHotKey、windows自动化快捷键工具
运维·windows·自动化
逆风的蚂蚁2 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
mennekes2 小时前
临时用电线路标识:插头颜色、钟面标识配套规范
运维·网络·科技·安全·制造
程序猿老A4 小时前
轻量云服务器总是卡,内存占比高?
运维·服务器
一只鹿鹿鹿5 小时前
智算算力、AI-芯片与产品解析(PPT文件)
大数据·运维·网络·人工智能·物联网·1024程序员节
沫璃染墨5 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
Kobebryant-Manba5 小时前
C/S和B/S结构
运维·服务器