选购服务器云SSH隧道
免费云服务器ecs试用
想把本地服务(Web、数据库、SSH)在安全通道下临时或长期暴露到远程服务器,或反向把内网机器安全地暴露给外网?SSH 隧道(正向、反向、动态)是最简单、最安全的方式。本文覆盖 Linux 与 Windows(OpenSSH / PuTTY) 的实际命令、持久化(autossh / systemd / 任务计划)和常见场景示例,手把手可落地。
一、SSH 隧道三种基本类型(用一句话区分)
本地转发(Local Forwarding):把本地端口通过远端 SSH 隧道转发到远端主机(本地→远端)。场景:本地浏览器访问远程内网服务。远程转发(Remote Forwarding)/反向隧道:把远端服务器的端口映射回本地机器(远端→本地),适合内网机器被动接入外网。场景:家里 NAS 或开发机放在内网,想从云主机访问。动态转发(Dynamic / SOCKS 代理):把 SSH 变成一个 SOCKS 代理,浏览器通过 SOCKS 访问任意远端目标。场景:临时翻墙或通过远端网络访问资源。二、前置条件(通用)
你有一台可公网访问的远程服务器(示例:bastion.example.com),并有 SSH 登录权限。本地有要被访问的服务(例如本地 Web: localhost:3000)。远程服务器允许相应转发(/etc/ssh/sshd_config 中 AllowTcpForwarding yes、GatewayPorts yes 对反向隧道可选)。如果无法修改,仍能用大多数场景。三、Linux / macOS:常用命令(实战)
1) 本地端口转发(把远端的一台内网服务在本地访问)
场景:远端服务器 10.0.0.5:80(仅远端可见),你想在本地浏览器 http://localhost:8080 访问它。
ssh -L 8080:10.0.0.5:80 user@bastion.example.com
含义:把本地 8080 绑定到 bastion,通过 bastion 去访问 10.0.0.5:80
打开浏览器访问 http://localhost:8080 即可看到远端内网页面
2) 远程端口转发 / 反向隧道(把家里机子的服务暴露到远端服务器)
场景:你家里机器 localhost:3000,但没有公网 IP。希望在远程服务器 bastion.example.com:9000 访问到它。
ssh -R 9000:localhost:3000 user@bastion.example.com
含义:在 bastion 上开放 9000 端口,转发到你本地的 3000
在远程服务器上访问 http://localhost:9000 即能访问本地服务
注意:如果你希望远端服务器对外网可见该端口(不是只在 bastion 本机),需要在 sshd_config 中启用 GatewayPorts yes 或使用 -R *:9000:localhost:3000 让 SSH 绑定到 0.0.0.0(有安全风险,谨慎)。
3) 动态转发(SOCKS 代理)
场景:把本地浏览器走远程服务器的网络:
ssh -D 1080 user@bastion.example.com
含义:在本地打开 SOCKS5 代理(localhost:1080)
在浏览器代理设置中填入 SOCKS5 localhost:1080,流量会通过 bastion 转发
四、Windows:用 OpenSSH(内置)或 PuTTY
用 Windows 内置 OpenSSH(PowerShell)
PowerShell 直接用上面 Linux 命令(假设你配置了 OpenSSH 客户端):
ssh -L 8080:10.0.0.5:80 user@bastion.example.com
ssh -R 9000:localhost:3000 user@bastion.example.com
ssh -D 1080 user@bastion.example.com
用 PuTTY(图形化设置)
打开 PuTTY → Session 填写 Host Name(bastion)。左侧导航:Connection → SSH → Tunnels。本地转发:Source port 填 8080,Destination 填 10.0.0.5:80,选择 Local → Add。远程转发:Source port 填 9000,Destination 填 localhost:3000,选择 Remote → Add。动态:Source port 填 1080,选择 Dynamic → Add。回到 Session → Open 即连接并生效。五、保持隧道长久在线:autossh / systemd / Task Scheduler
短连接断了很烦,常用两种持久化方法:
Linux:用 autossh(自动重连)
安装并启动 autossh(Ubuntu):
sudo apt update
sudo apt install autossh -y
用法示例(反向隧道,持久重连):
autossh -M 0 -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3"
云服务器按时
-R 9000:localhost:3000 user@bastion.example.com
说明:-M 0 关闭监控端口(在某些环境更稳定),-N 不执行远程命令。
想让它随开机自启,创建 systemd 服务/etc/systemd/system/autossh-tunnel.service:
[Unit]
Description=autossh reverse tunnel
After=network-online.target
Wants=network-online.target
[Service]
User=youruser
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -R 9000:localhost:3000 user@bastion.example.com
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now autossh-tunnel.service
Windows:用任务计划或 NSSM 注册为服务
把 ssh -R ... 命令写入一个 .bat 或 PowerShell 脚本。用任务计划(Task Scheduler)创建At log on或At startup任务,以最高权限运行该脚本;或者用NSSM将 ssh 命令注册为 Windows 服务,自动重启。六、密钥、认证与安全建议(非常重要)
使用 SSH 密钥对登录(不使用密码):本地生成:ssh-keygen -t ed25519 -C "your@note"上传公钥:ssh-copy-id user@bastion.example.com 或把 ~/.ssh/id_ed25519.pub 内容追加到远端 ~/.ssh/authorized_keys。给反向隧道的 authorized_keys 加限制(仅允许端口转发):在远端 authorized_keys 对应公钥前加上命令/限制,例如:no-pty,no-agent-forwarding,no-X11-forwarding,permitopen="localhost:9000" ssh-ed25519 AAAA...
这样能限制该密钥只能做指定转发,增强安全。限制 GatewayPorts 与监听地址:如果不需要对公网开放远端端口,避免 GatewayPorts yes 或使用绑定到 localhost 。审计与日志:定期检查远端服务器的 sshd 日志与 netstat,确认没有异常端口被开放。防火墙:仅把必须的端口(80/443/9000 或你指定的)放行到远程 SSH 主机,避免不必要暴露。七、示例场景速查(复制使用)
场景 A:把远端内网 Web 映射到本地(便捷调试)
ssh -L 8080:10.0.0.5:80 user@bastion.example.com
浏览器访问 http://localhost:8080
场景 B:从云服务器访问家中开发机(反向隧道)
去云服务器
家里开发机执行:
autossh -M 0 -N -R 9000:localhost:3000 user@bastion.example.com
在云服务器上访问 http://localhost:9000 即可看到家里开发机服务
场景 C:用远程 SOCKS 代理上网(临时)
ssh -D 1080 -C -N user@bastion.example.com
在浏览器设置 SOCKS5 localhost:1080
八、常见问题与排查
隧道能连上但服务无法访问:确认目标地址/端口在源端可达(例如本地 curl http://localhost:3000)。反向隧道在远端只在 localhost 有效:需 GatewayPorts 或使用 -R *:9000:...(谨慎)。隧道频繁断开:加上 ServerAliveInterval 与 ServerAliveCountMax,或使用 autossh。授权失败:检查 SSH key 权限(~/.ssh 目录需 700,authorized_keys 需 600)。Windows 隧道不生效:用 PowerShell 以管理员权限运行,或确保 OpenSSH 客户端版本支持所用参数;PuTTY 需要在 Tunnels 正确添加映射并启动会话。九、总结(3 步法速记)
选类型:本地(-L)、远程/反向(-R)、动态/代理(-D)。先用命令行测试隧道(ssh -L/-R/-D),确认目标可达。需要长期保持则用 autossh(Linux)或任务计划/NSSM(Windows)做持久化,并用密钥与 authorized_keys 限制权限保证安全。云服务器怎么收费

扫码关注
微信好友
关注抖音