cygwin + autossh
cygwin + autossh
前言
在 Windows 平台上进行端口转发总是会莫名其妙的断连,即使已经在服务端和客户端修改对应的配置,在一段时间后仍然会断开。可能的原因是中间经过的交换机路由器防火墙等设备过滤了ssh心跳包。实在不想在这上面费时间了,直接用 autossh 进行自动重连。
在 Windows 使用 autossh 需要安装 Cygwin,这是一个开源的免费软件,可以在 Windows 操作系统中提供类 Unix 的环境和工具,可以将它理解为运行在 Microsoft Windows 上的流行 GNU 和其他开源工具的发行版,它可以让用户在 Windows 上运行类 Unix 的应用程序、Shell 脚本和命令行工具。Cygwin 的核心部分是 cygwin1.dll,它提供了这些程序所期望的 POSIX 系统调用和环境。  
cygwin + autossh
配置
- 到 cygwin官网 下载
cygwin setup-x86_64.exe。 - 点击运行,直接默认选择然后下一步,到了
选择安装包时记得别忘了选择 autossh,然后等待下载安装完成。 - 打开 cygwin 的终端,输入端口转发的命令,只需把 
ssh换成autossh就行了。1
autossh -M 12345:54321 -o ServerAliveInterval=60 -N -R 5000:192.168.5.4:8080 user@ip
12345是本地监控端口。54321是远程服务器上的监控端口。- 设置为 
-M 0就是不使用监听端口。 
 
注意事项
- 在这篇博客中出现了 
autossh总是自动重连的问题,总结的经验是注意监听端口不要选择低位端口,否则可能会在远端启动失败,导致 ssh 总是被重启。 - 当本地主机人为中断
autossh,虽然关闭了,但服务器ssh主机的autossh监控端口仍然处于监听状态,要等到一段时间后才能停用监听端口,这样在autossh监听端口未超时之前,目的地主机重新启动autossh会导致创建ssh隧道失败。 - 此外,
autossh将通过一对监控端口来回发送数据,以便跟踪已建立的连接,默认接收端口比发送端口大1,比如发送的端口30000,那么接收数据的端口就是30001。 
免密登录
- 生成密钥 生成的密钥可以在
1
ssh-keygen -t rsa
cygwin安装的路径下找到,我这里是D:\cygwin\home\WangZX\.ssh - 将公钥文件导入给服务器 完成后就不需要输入密码了。
1
ssh-copy-id -i /home/WangZX/.ssh/id_rsa.pub user@ip
 
开机自启动
- 在
Cygwin的安装目录下创建脚本,我这里是D:\cygwin\home\user\mybat,然后在mybat文件夹创建一个start.sh,内容如下所示:1
/usr/bin/autossh -M 12345:54321 -o ServerAliveInterval=60 -N -R 5000:192.168.5.4:8080 user@ip
 - 赋予执行权限,在
Cygwin终端中运行以下命令,赋予脚本执行权限:1
chmod +x /home/user/mybat/start.sh
 - 创建
Windows批处理文件,例如start.bat,内容如下所示:1
D:\cygwin\bin\mintty.exe /bin/bash -l -c "/home/usr/mybat/start.sh"
 - 将
start.bat放入启动文件夹C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp,这样系统启动时会自动执行该脚本。 
另外,把自动打开Open WebUI的bat脚本也添加进去,如下所示:
1  | start cmd /k "conda activate py311 && open-webui serve"  | 
更新
用了一段时间,确实好用。连续几天不关机,一次断联也没有。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Star!





