建立单个临时隧道(手工,不保活)
在内网服务器上执行:
ssh -p 公网SSH端口 -R 公网端口:127.0.0.1:内网端口 root@公网IP注意
加上 -fN 可后台运行:ssh -fN -p 50001 -R ...
此隧道断开后不会自动重连,适合临时测试。
安装 autossh(内网服务器)
yum install -y epel-release && yum install -y autossh配置 SSH 免密登录(必须)
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa ssh-copy-id -p 50001 root@120.47.167.39测试:ssh -p 50001 root@120.47.167.39 echo "OK" 不输密码即成功。
创建 systemd 服务文件
cat > /etc/systemd/system/autossh-tunnel.service <<EOF [Unit] Description=AutoSSH tunnel After=network.target [Service] Environment="AUTOSSH_GATETIME=0" ExecStart=/usr/bin/autossh -M 0 -NT -p 50001 -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" -o "ExitOnForwardFailure=yes" -o "StrictHostKeyChecking=no" -R 29000:127.0.0.1:29000 -R 34816:127.0.0.1:34816 root@120.47.167.39 Restart=always RestartSec=10 User=root [Install] WantedBy=multi-user.target EOF启动并启用服务
systemctl daemon-reload systemctl enable autossh-tunnel systemctl start autossh-tunnel systemctl status autossh-tunnel # 应显示 active (running)
后续如何添加新的隧道
方法一:修改现有 systemd 服务
停止服务:systemctl stop autossh-tunnel
编辑服务文件:vi /etc/systemd/system/autossh-tunnel.service
在 ExecStart 行中增加新的 -R 公网端口:127.0.0.1:内网端口
ssh -fN -p 50001 -R 新公网端口:127.0.0.1:新内网端口 root@120.47.167.39重载配置并重启:
systemctl daemon-reload
systemctl restart autossh-tunnel方法二:临时添加(不保活,仅测试)
ssh -fN -p 50001 -R 新公网端口:127.0.0.1:新内网端口 root@120.47.167.39检查隧道状态是否正常
查看 autossh 服务状态(内网服务器)
systemctl status autossh-tunnelactive (running) 表示进程在运行。
若显示 failed,查看日志:journalctl -u autossh-tunnel -n 50
查看公网服务器端口监听
在公网服务器上执行:ss -tlnp | grep -E "29000|34816"应看到 0.0.0.0:29000 和 0.0.0.0:34816,进程为 sshd。
从外网测试端口连通性(Windows PowerShell)
Test-NetConnection -ComputerName 120.47.167.39 -Port 29000 Test-NetConnection -ComputerName 120.47.167.39 -Port 34816结果应为 TcpTestSucceeded : True。
关机后如何重启
场景一:内网服务器关机后重启
autossh 服务已设置 enable,开机后自动启动。
等待约 10-30 秒(网络就绪 + autossh 重连),隧道自动恢复。
公网服务器无需任何操作。
验证:
systemctl status autossh-tunnel 和 ss -tlnp。场景二:公网服务器关机后重启
需要确保公网服务器上的 sshd 服务开机自启(默认已启用)。
内网服务器的 autossh 会检测到连接断开,并自动尝试重连(每 10 秒一次),一旦公网 SSH 恢复,隧道自动重建。
无需人工干预。
场景三:两个服务器都重启了
顺序无所谓,autossh 会持续重连直到成功。
建议等待 1 分钟后检查。
手动重启隧道
systemctl restart autossh-tunnel
评论 (0)