乐闻世界logo
搜索文章和话题

SSH 端口转发有哪些类型和应用场景?

2月19日 19:29

SSH 端口转发(Port Forwarding)是 SSH 提供的一项强大功能,允许通过加密的 SSH 连接安全地转发网络流量。它可以将本地或远程端口的流量通过 SSH 隧道转发到目标主机。

三种端口转发模式

1. 本地端口转发(Local Port Forwarding)

将本地端口的流量转发到远程服务器可访问的目标。

bash
# 语法 ssh -L [本地地址:]本地端口:目标地址:目标端口 用户@远程服务器 # 示例:访问远程服务器的 MySQL ssh -L 3306:localhost:3306 user@remote-server # 示例:通过跳板机访问内网服务 ssh -L 8080:internal-server:80 jump-server

应用场景

  • 访问远程服务器上的数据库
  • 通过跳板机访问内网服务
  • 测试远程服务的本地开发

2. 远程端口转发(Remote Port Forwarding)

将远程服务器端口的流量转发到本地机器可访问的目标。

bash
# 语法 ssh -R [远程地址:]远程端口:目标地址:目标端口 用户@远程服务器 # 示例:让远程服务器访问本地开发服务器 ssh -R 8080:localhost:3000 user@remote-server # 示例:远程访问本地数据库 ssh -R 3306:localhost:3306 user@remote-server

应用场景

  • 内网穿透,让外网访问本地服务
  • 远程调试本地应用
  • 从远程服务器访问本地资源

3. 动态端口转发(Dynamic Port Forwarding)

创建 SOCKS 代理,支持动态转发多个目标。

bash
# 语法 ssh -D 本地端口 用户@远程服务器 # 示例:创建 SOCKS 代理 ssh -D 1080 user@remote-server

应用场景

  • 浏览器代理访问内网资源
  • 多目标服务的统一代理
  • 绕过网络限制

高级配置

持久化连接

bash
# 使用 autossh 保持连接 autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 8080:remote:80 user@server # 或在 SSH 配置中设置 ServerAliveInterval 60 ServerAliveCountMax 3

SSH 配置文件

bash
# ~/.ssh/config Host tunnel HostName remote-server.com User username LocalForward 8080 localhost:80 RemoteForward 9000 localhost:3000 DynamicForward 1080

后台运行

bash
# 后台运行端口转发 ssh -f -N -L 8080:remote:80 user@server # -f: 后台运行 # -N: 不执行远程命令

安全注意事项

  1. 访问控制

    • 使用 GatewayPorts no 限制仅本地访问
    • 配置防火墙规则限制转发端口
    • 使用 AllowTcpForwarding 控制转发权限
  2. 连接安全

    • 使用强加密算法
    • 定期轮换 SSH 密钥
    • 监控异常连接行为
  3. 资源管理

    • 设置连接超时
    • 限制并发连接数
    • 定期清理不用的转发规则

实际应用案例

开发环境访问

bash
# 通过跳板机访问开发数据库 ssh -L 3307:dev-db.internal:3306 jump-server # 然后在本地连接 mysql -h 127.0.0.1 -P 3307 -u user -p

内网服务调试

bash
# 将本地开发服务器暴露给远程团队 ssh -R 8080:localhost:3000 remote-server # 团队成员通过 http://remote-server:8080 访问

安全浏览

bash
# 创建 SOCKS 代理 ssh -D 1080 corporate-server # 浏览器配置 SOCKS5 代理 127.0.0.1:1080

SSH 端口转发是网络工程师和开发者的必备技能,能够安全地解决复杂的网络访问需求。

标签:SSH