首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SSH 三种隧道

SSH 三种隧道

作者头像
Khan安全团队
发布2025-11-26 15:41:45
发布2025-11-26 15:41:45
10
举报
文章被收录于专栏:Khan安全团队Khan安全团队

一、本地端口映射(Local Port Forwarding)

作用:将远端机器的某个端口映射到本地端口,本地访问该端口相当于直接访问远端端口。

适用场景:开发时访问远端服务器的服务(如数据库、集群服务),无需直接暴露远端端口。

说明:本地客户端通过访问本地的8080端口,数据会通过 SSH 隧道传输到 SSH 服务器,再由 SSH 服务器转发到远端服务器db.example.com的3306端口。

操作步骤

1、确认远端服务状态

假设远端服务器 remote_host(IP:10.0.0.100)上运行着一个服务(如 NebulaGraph 服务),端口为 9669,且该服务仅监听本地或内网(不直接对外暴露)。

2、执行本地端口映射命令

在本地终端运行:

代码语言:javascript
复制
ssh -L [本地端口]:[远端目标IP]:[远端目标端口] [远端用户名]@[远端服务器IP] -N

-L:指定本地端口映射

-N:仅建立隧道,不登录 shell(可选,后台运行可加 -f)

将本地 9669 端口映射到远端 10.0.0.100 的 9669 端口:

代码语言:javascript
复制
ssh -L 9669:127.0.0.1:9669 root@10.0.0.100 -N

(127.0.0.1 表示远端服务器自身,若服务在另一台内网机器 10.0.0.101 上,可改为 10.0.0.101)

3、验证映射效果

本地访问 localhost:9669,相当于直接访问 10.0.0.100:9669。例如用 telnet 测试:

代码语言:javascript
复制
telnet localhost 9669  # 若连接成功,说明映射生效

二、远程端口映射(Remote Port Forwarding)

作用:将本地端口映射到远端服务器的某个端口,让远端(或公网)访问该端口相当于访问本地服务。

适用场景:本地运行的服务需要被公网访问(如调试 WebHook 接口),需远端服务器 SSH 配置允许。

说明:远程客户端访问 SSH 服务器的9090端口,数据会通过 SSH 隧道传输到本地服务器的3000端口。

操作步骤

1、配置远端 SSH 服务(关键)

远端服务器需允许远程端口映射,修改 /etc/ssh/sshd_config:

代码语言:javascript
复制
sudo vim /etc/ssh/sshd_config

确保以下配置(无则添加):

代码语言:javascript
复制
GatewayPorts yes  # 允许其他机器访问远端映射的端口(默认仅远端自身可访问)
AllowTcpForwarding yes  # 允许 TCP 转发(默认开启,确认未禁用)

重启 SSH 服务生效:

代码语言:javascript
复制
sudo systemctl restart sshd

2、确认本地服务状态

假设本地运行着一个 Web 服务,端口为 8080(如调试中的 WebHook 接口)。

3、执行远程端口映射命令

在本地终端运行:

代码语言:javascript
复制
ssh -R [远端端口]:[本地目标IP]:[本地目标端口] [远端用户名]@[远端服务器IP] -N

-R:指定远程端口映射

示例:将本地 8080 端口映射到远端 10.0.0.100 的 8080 端口:

代码语言:javascript
复制
ssh -R 8080:127.0.0.1:8080 root@10.0.0.100 -N

4、验证映射效果

远端服务器访问 localhost:8080,应能看到本地 8080 服务内容。

若 GatewayPorts 设为 yes,公网机器访问 10.0.0.100:8080,也能访问本地服务。

三、动态端口映射(Dynamic Port Forwarding,SOCKS5 代理)

作用:将本地端口作为 SOCKS5 代理服务器,所有通过该代理的网络请求会经远端服务器转发。

适用场景:通过远端服务器访问其所在网络的资源(如访问内网网站、突破网络限制)。

说明:本地客户端将8080端口作为 SOCKS 代理,所有通过该代理的网络请求会经 SSH 服务器转发到互联网上的各个站点。

操作步骤

1、执行动态端口映射命令

在本地终端运行:

代码语言:javascript
复制
ssh -D [本地SOCKS端口] [远端用户名]@[远端服务器IP] -N

-D:指定动态端口(SOCKS5 代理端口)

示例:将本地 1080 端口作为 SOCKS5 代理,通过 10.0.0.100 转发:

代码语言:javascript
复制
ssh -D 1080 root@10.0.0.100 -N

2、配置客户端使用代理

浏览器(如 Chrome):安装代理插件(如 SwitchyOmega),设置代理类型为 SOCKS5,地址 localhost,端口 1080。

命令行工具(如 curl):

代码语言:javascript
复制
curl --socks5-hostname localhost:1080 https://目标网站  # 通过代理访问

3、验证代理效果

访问需通过远端服务器才能访问的资源(如远端内网地址 192.168.1.1),若能成功打开,说明代理生效。

补充说明

后台运行隧道:命令后加 -f(需输入密码或配置免密登录),例如:

代码语言:javascript
复制
ssh -f -L 9669:127.0.0.1:9669 root@10.0.0.100 -N

关闭隧道:通过 ps aux | grep ssh 找到进程 ID,再用 kill [PID] 终止。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档