我有一个批处理脚本,可在 Windows 10 笔记本电脑启动时运行。
批处理脚本的目的是当笔记本电脑处于开启状态时,始终保持与另一台计算机的 ssh 隧道打开。批处理脚本执行以下操作:
- 睡眠 5 秒
plink
使用存储的 PuTTy 配置运行以打开所需的 ssh 隧道- 在
plink
会话中,打印日期/时间,然后运行cat
(所以它只是坐在那里吃掉任何人可能在命令提示符中输入的任何字符) - 退出时
plink
,打印“隧道已死”消息,然后循环回到开始处
存储的 PuTTy 配置每 5 秒发送一次 TCP keepalive。
如果我关闭笔记本电脑的盖子并再次打开它,命令窗口就会出现,并打印上一次的日期/时间消息,因此看起来隧道是打开的。但是,任务管理器中没有列出 plink.exe,从另一台机器上我可以看到隧道实际上没有打开。当我在命令提示符中按下一个键时,脚本会恢复运行并打印“隧道已死”消息,然后循环回来并再次打开隧道。
如果我不是简单地合上盖子,而是关闭笔记本电脑上的 WiFi - 一切都会按预期运行(脚本会继续循环,每次调用都会plink
失败并立即返回)。
我不确定这是plink
问题还是 Windows 10/命令提示符问题。有人遇到过这种情况并能提供建议吗?理想的行为是,当笔记本电脑盖打开时,脚本意识到已plink
失败/退出并打印“隧道已死”消息,然后循环并再次启动隧道。
编辑后添加:Windows 中“当我合上盖子时”的设置是“睡眠”(无论是使用电池还是插入电源)。完整的批处理脚本如下:
@echo off
:start
sleep 5s
plink -no-antispoof -R 5999:localhost:5999 garibaldi "date ; if sleep 15 | nc localhost 5999 |grep -q RFB 2>/dev/null ; then cat ; fi"
echo tunnel died %date% %time%
goto start
其中garibaldi
是已保存的 PuTTy 配置的名称,双引号中的部分是在远程主机上运行的脚本。(隧道的目的是允许我使用 VNC 通过端口 5999 上的远程端口转发通过隧道重新连接到笔记本电脑;“RFB”是 RealVNC 服务器在您连接到该端口时发出的字符串的一部分。当隧道启动时,远程端口转发安排/VNC 可以正常工作。)