有一个脚本,它每天利用 plink.exe 从一堆网络设备读取配置。有时,一些设备会卡住提供备份数据的内部进程,并且 plink 实例(以及整个脚本)会卡住,直到按下 CTRL+C。有没有办法推动 plink.exe 为远程操作设置超时?现在 plink.exe 只报告 SSH 协议层超时,但这不是我的情况,因为 SSH 连接和登录成功运行,但远程命令执行卡住了整个过程。
我在 plink.exe 帮助中找不到任何有用的信息
答案1
在使用 plink 连接之前,先 ping 设备怎么样?感谢这个答案我得到了一个完美的功能:
set "_ip=localhost"
set "_ip=192.168.1.1"
ping %_ip% -n 1 -4 | find /i "TTL=">nul
if errorlevel 1 (
echo ping %_ip% failure
) else (
echo ping %_ip% success
)
-4
强制使用 IPv4(例如 pinglocalhost
回复 IPv6 而无TTL=
输出)| find /i "TTL="
作为find
命令errorlevel
提出>nul
抑制不需要的输出
只需用你的 plink 命令替换即可echo ping %_ip% success
。
答案2
此 powershell 代码启动 windows 进程 [此处为 ping.exe,以便于测试],如果它在预设时间 [此处为 3 秒 - 3000 毫秒] 内没有结束,则终止它。
powershell.exe "Start-Process 'ping.exe' -ArgumentList '127.0.0.1', '-t' -NoNewWindow -PassThru | %% { if(-not $_.WaitForExit(3000)) { $_.Kill() } }"
它是一个在混合批处理/ps 脚本中易于使用的单行脚本
答案3
没有plink
这个选项。
但是有很多解决方法,例如如果你已经timeout
安装了 GNU
/usr/bin/timeout 2s plink -no-antispoof $me@$host hostname -s