1. 本地端口转发 (Local Port Forwarding)
功能:将远程服务器端口映射到本地
场景:访问远程数据库/内网服务
- bash
ssh -L [本地IP:]本地端口:目标主机:目标端口 用户名@跳板机
示例 1:访问远程 MySQL
- bash
ssh -L 3306:db-server.internal:3306 user@gateway.com # 本地连接 127.0.0.1:3306 即访问 db-server.internal:3306
示例 2:访问内网 Web
- bash
ssh -L 8080:192.168.1.100:80 admin@vpn.company.com # 浏览器访问 http://localhost:8080
高级选项:
- bash
# 绑定特定网卡 ssh -L 0.0.0.0:8080:internal:80 user@server # 保持后台运行 ssh -fN -L 3306:db:3306 user@server
2. 远程端口转发 (Remote Port Forwarding)
功能:将本地端口暴露到远程服务器
场景:临时公开本地开发环境
- bash
ssh -R [远程IP:]远程端口:本地主机:本地端口 用户名@远程服务器
示例 1:暴露本地 Web 服务
- bash
ssh -R 8080:localhost:3000 user@public-server.com # 访问 public-server.com:8080 即访问你的本地 3000 端口
示例 2:共享本地数据库
- bash
ssh -R 5432:localhost:5432 dev@cloud-server # 同事连接 cloud-server:5432 即访问你的本地 PostgreSQL
服务器配置 (需在 sshd_config 添加):
- bash
# /etc/ssh/sshd_config GatewayPorts yes # 允许外部访问 AllowTcpForwarding yes
3. 动态端口转发 (SOCKS 代理)
功能:创建加密代理通道
场景:安全上网/突破网络限制
- bash
ssh -D [本地IP:]本地端口 用户名@代理服务器
基础示例:
- bash
ssh -D 1080 user@proxy-server # 配置浏览器 SOCKS5 代理为 127.0.0.1:1080
性能优化:
- bash
# 启用压缩 + 后台运行 ssh -CqfN -D 1080 user@server # 防止超时断开 ssh -o ServerAliveInterval=60 -D 1080 user@server