> 技术文档 > HoRain云--SSH多级跳板:安全穿透内网指南_ssh怎么做内网穿透

HoRain云--SSH多级跳板:安全穿透内网指南_ssh怎么做内网穿透

  

🎬 HoRain云小助手:个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

🔗 ​​一、多级转发核心原理​​

⚙️ ​​二、多级跳板配置方法​​

​​方法1:命令行逐级建立隧道​​(适合临时连接)

​​方法2:SSH配置文件预定义路径​​(适合长期使用)

​​方法3:动态转发代理链​​(全网流量代理)

🔒 ​​三、安全加固与稳定性优化​​

🖥️ ​​四、典型应用场景​​

⚠️ ​​五、常见问题排查​​

💎 ​​总结​​


img

SSH端口转发实现多级跳板连接的核心在于通过嵌套的SSH隧道将流量逐级转发至目标主机。以下是具体实现方法和关键步骤,结合应用场景与优化建议:


🔗 ​​一、多级转发核心原理​

  1. ​隧道嵌套机制​

    • ​本地转发链​​:将每一级跳板的本地端口绑定到下一级目标端口,形成“本地→跳板1→跳板2→目标”的加密链路。
    • ​动态代理延伸​​:通过动态转发(-D)建立SOCKS代理链,后续流量自动经过多级跳板。
  2. ​适用场景​

    • 访问企业内网数据库(需穿透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,所有流量经多级跳板加密转发。


🔒 ​​三、安全加固与稳定性优化​

  1. ​密钥认证替代密码​

    ssh-keygen -t ed25519 # 生成密钥ssh-copy-id user@jump-host # 分发公钥
    • 每级跳板使用独立密钥,降低单点泄漏风险。
  2. ​限制转发权限​
    在跳板机的 /etc/ssh/sshd_config 中设置:

    AllowTcpForwarding yes # 允许转发GatewayPorts no # 禁止远程绑定到0.0.0.0PermitOpen localhost:* # 仅允许转发到本地回环地址
  3. ​防断连与自动重连​

    • 使用 autossh 替代 ssh,并添加心跳检测:
      autossh -M 50000 -L 7999:localhost:2999 user@jump1-host
    • 参数 -o ServerAliveInterval=60 每60秒发送心跳包。

🖥️ ​​四、典型应用场景​

  1. ​访问多层内网数据库​

    # 本地→跳板1→跳板2→数据库ssh -L 3307:localhost:3306 -J user@jump1,user@jump2 user@db-host

    本地连接 127.0.0.1:3307 即访问内网数据库。

  2. ​公网暴露内网Web服务​

    # 在内部服务器执行:本地80端口→公网服务器9000端口ssh -R 9000:localhost:80 user@public-server

    访问 public-server:9000 即可访问内网服务(需公网服务器配置 GatewayPorts yes)。

  3. ​穿透企业审计环境​
    通过动态转发建立代理链,绕过网络监控:

    ssh -D 1080 -J user@proxy1,user@proxy2 user@exit-node

    配合 proxychains 实现全流量加密出网。


⚠️ ​​五、常见问题排查​

​问题​​ ​​解决方案​​ ​​连接超时​​ 检查每级跳板防火墙规则(ufw status)和SSH服务状态(systemctl status sshd) ​​Permission denied​​ 确认密钥权限(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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙