HoRain云--SSH多级跳板:安全穿透内网指南_ssh怎么做内网穿透
🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称
专栏介绍
《C语言》
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。
《网络协议》
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!
《docker容器精解篇》
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。
《linux系列》
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。
《python 系列》
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。
《试题库》
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)
目录
⛳️ 推荐
专栏介绍
🔗 一、多级转发核心原理
⚙️ 二、多级跳板配置方法
方法1:命令行逐级建立隧道(适合临时连接)
方法2:SSH配置文件预定义路径(适合长期使用)
方法3:动态转发代理链(全网流量代理)
🔒 三、安全加固与稳定性优化
🖥️ 四、典型应用场景
⚠️ 五、常见问题排查
💎 总结
SSH端口转发实现多级跳板连接的核心在于通过嵌套的SSH隧道将流量逐级转发至目标主机。以下是具体实现方法和关键步骤,结合应用场景与优化建议:
🔗 一、多级转发核心原理
-
隧道嵌套机制
- 本地转发链:将每一级跳板的本地端口绑定到下一级目标端口,形成“本地→跳板1→跳板2→目标”的加密链路。
- 动态代理延伸:通过动态转发(
-D
)建立SOCKS代理链,后续流量自动经过多级跳板。
-
适用场景
- 访问企业内网数据库(需穿透2层以上防火墙)。
- 从公网穿透多层NAT访问家庭内网服务(如NAS、监控设备)。
⚙️ 二、多级跳板配置方法
方法1:命令行逐级建立隧道(适合临时连接)
# 第一跳:本地端口7999 → 跳板机1的2999端口ssh -L 7999:localhost:2999 user@jump1-host# 在跳板机1上执行:2999端口 → 跳板机2的3999端口ssh -L 2999:localhost:3999 user@jump2-host# 在跳板机2上执行:3999端口 → 目标机80端口ssh -L 3999:target-host:80 user@target-host
效果:访问 localhost:7999
等价于访问 target-host:80
。
方法2:SSH配置文件预定义路径(适合长期使用)
编辑 ~/.ssh/config
,定义多级代理链:
# 第一级跳板Host Jump1 HostName jump1.example.com User user1 IdentityFile ~/.ssh/key_jump1# 第二级跳板(通过Jump1连接)Host Jump2 HostName jump2.example.com User user2 ProxyCommand ssh -W %h:%p Jump1 IdentityFile ~/.ssh/key_jump2# 目标主机(通过Jump2连接)Host TargetDB HostName db.internal User dbuser ProxyCommand ssh -W %h:%p Jump2 IdentityFile ~/.ssh/key_target
使用:直接执行 ssh TargetDB
或结合端口转发命令(如 ssh -L 3306:TargetDB:3306 Jump1
)。
方法3:动态转发代理链(全网流量代理)
# 本地 → 跳板1 → 跳板2 → 任意目标ssh -D 1080 -J user1@jump1-host,user2@jump2-host user@final-host
效果:配置浏览器代理为 socks5://127.0.0.1:1080
,所有流量经多级跳板加密转发。
🔒 三、安全加固与稳定性优化
-
密钥认证替代密码
ssh-keygen -t ed25519 # 生成密钥ssh-copy-id user@jump-host # 分发公钥
- 每级跳板使用独立密钥,降低单点泄漏风险。
-
限制转发权限
在跳板机的/etc/ssh/sshd_config
中设置:AllowTcpForwarding yes # 允许转发GatewayPorts no # 禁止远程绑定到0.0.0.0PermitOpen localhost:* # 仅允许转发到本地回环地址
-
防断连与自动重连
- 使用
autossh
替代ssh
,并添加心跳检测:autossh -M 50000 -L 7999:localhost:2999 user@jump1-host
- 参数
-o ServerAliveInterval=60
每60秒发送心跳包。
- 使用
🖥️ 四、典型应用场景
-
访问多层内网数据库
# 本地→跳板1→跳板2→数据库ssh -L 3307:localhost:3306 -J user@jump1,user@jump2 user@db-host
本地连接
127.0.0.1:3307
即访问内网数据库。 -
公网暴露内网Web服务
# 在内部服务器执行:本地80端口→公网服务器9000端口ssh -R 9000:localhost:80 user@public-server
访问
public-server:9000
即可访问内网服务(需公网服务器配置GatewayPorts yes
)。 -
穿透企业审计环境
通过动态转发建立代理链,绕过网络监控:ssh -D 1080 -J user@proxy1,user@proxy2 user@exit-node
配合
proxychains
实现全流量加密出网。
⚠️ 五、常见问题排查
ufw status
)和SSH服务状态(systemctl status sshd
)chmod 600 ~/.ssh/key
)及目标机authorized_keys
文件配置正确-v
参数查看详细日志(ssh -v -L ...
),检查端口冲突(netstat -tuln
)GatewayPorts yes
并重启SSH服务💎 总结
多级跳板连接的本质是嵌套隧道+加密代理。优先推荐预定义SSH配置(~/.ssh/config
)实现“一键连接”,复杂场景可组合动态转发与ProxyCommand
。关键注意事项:
- 安全底线:全程使用密钥认证,限制每级跳板的转发权限。
- 稳定优先:生产环境用
autossh -M
监听端口,避免隧道中断。 - 灵活选型:临时调试用命令行逐级转发,长期需求写SSH配置,全网代理用动态转发链。
附:多级转发流程示意图
本地 → [-L 端口1] → 跳板1 → [-L 端口2] → 跳板2 → 目标
或本地 → [-D 1080 -J 跳板1,跳板2] → 全网代理
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙