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!