文档说明
本指南用于在 Windows 电脑上,通过 SSH 隧道将本地端口转发至远程服务器的本地端口,并配置该连接在 Windows 开机时自动、无黑框在后台运行,且具备断线自动重连功能。
适用环境:Windows 10 / Windows 11 (内置 OpenSSH)
第一阶段:配置 SSH 免密登录
说明:开机自动运行的程序无法进行弹窗交互,因此必须配置基于密钥的免密登录。
1. 生成 SSH 密钥对
打开 Windows 的命令提示符 (CMD)。输入以下命令并回车:
ssh-keygen -t rsa -b 4096
遇到所有提示(如保存路径、密码设置等),一律直接按回车键,使用默认设置且不设置密码。
2. 将公钥发送至远程服务器
继续在 CMD 中输入以下完整命令并回车(将 user@remote_host 替换为你的实际用户名和服务器地址):
type %USERPROFILE%\.ssh\id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
注意:执行此命令时,系统会要求输入一次远程服务器的登录密码。
3. 测试免密连接
在 CMD 中输入:
ssh user@remote_host
如果无需输入密码即可成功登录服务器终端,则说明免密配置成功。输入 exit 退出连接。
第二阶段:创建自动重连批处理脚本
说明:编写一个 .bat 脚本,用于建立 SSH 隧道并在网络断开时自动重连。
1. 创建工作目录
在 C:\ 根目录(或其他不易被误删的位置)新建一个文件夹,命名为 SSH_Tunnel。
2. 编写脚本文件
在该文件夹内新建一个文本文档,重命名为 ssh-tunnel.bat(请确保在系统视图中开启了”显示文件扩展名”,务必删掉隐藏的 .txt 后缀)。
右键编辑该文件,粘贴以下代码并保存(请根据你的实际情况修改端口和服务器地址):
@echo off :loop :: -N: 仅转发端口,不打开远程终端 :: ServerAlive 参数: 用于检测断线,超时后自动结束当前连接 :: 本地端口:LOCAL_PORT,远程端口:REMOTE_PORT ssh -N -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -L LOCAL_PORT:localhost:REMOTE_PORT user@remote_host :: 断开后等待 10 秒重新发起连接 timeout 10 goto loop
参数说明:
-L LOCAL_PORT:localhost:REMOTE_PORT:将本地端口转发到远程服务器的端口user@remote_host:替换为你的 SSH 用户名和服务器地址ServerAliveInterval=30:每 30 秒发送一次心跳包ServerAliveCountMax=3:连续 3 次无响应则判定断线
第三阶段:配置开机隐蔽启动
说明:利用 VBS 脚本调用 .bat 文件,实现开机自启并隐藏运行时的黑色命令提示符窗口。
1. 进入 Windows 启动文件夹
按下键盘快捷键 Win + R 打开”运行”窗口。输入 shell:startup 并回车,系统将打开当前用户的”启动”文件夹。
2. 编写 VBS 引导脚本
在”启动”文件夹中新建一个文本文档,重命名为 start-tunnel.vbs(同样需注意清除 .txt 后缀)。
右键编辑该文件,粘贴以下代码并保存(若第二阶段的文件夹路径不同,请自行修改代码中的路径):
Set ws = CreateObject("Wscript.Shell")
' vbhide 参数实现后台隐蔽运行
ws.run "cmd /c C:\SSH_Tunnel\ssh-tunnel.bat", vbhide
完成!
至此配置全部结束。你可以直接双击 start-tunnel.vbs 文件立即运行测试。以后每次 Windows 开机,SSH 隧道都会在后台自动打通并保持连接。
常见问题排查
- 无法自动重连:检查 ServerAlive 参数是否正确配置
- 黑框仍然显示:确认 VBS 脚本中的路径是否正确,且使用了 vbhide 参数
- 开机未自动启动:确认 VBS 文件已放入启动文件夹(
shell:startup) - 连接被拒绝:检查远程服务器 SSH 服务是否运行,端口是否正确