PowerShell脚本SSH连接远程Linux执行后卡住问题求助
SSH执行远程脚本后连接不退出的解决办法
问题原因
你在SSH命令中使用了-tt参数,该参数会强制给远程主机分配伪终端(PTY)。当脚本执行完成后,伪终端会停留在交互式shell状态,导致SSH连接不会自动断开,进而卡住你的PowerShell脚本。
具体解决方案
1. 移除-tt参数(优先推荐)
如果不需要交互式终端操作,直接删除-tt参数,让SSH以非交互式模式执行脚本,执行完毕后会自动退出连接:
foreach($wiersz in $zm1.ParamValue -split ";") { cmd /c "ssh -i k4 user@$($wiersz) < script.sh" }
2. 替换logout为exit并明确执行方式
如果必须保留-tt参数,将脚本中的logout替换为exit(logout仅适用于交互式shell,非交互式场景下exit更可靠),同时在SSH命令中明确指定用非交互式bash执行脚本:
foreach($wiersz in $zm1.ParamValue -split ";") { cmd /c "ssh -tt -i k4 user@$($wiersz) 'bash -s' < script.sh" }
修改后的script.sh:
#!/bin/bash awk -F" " -v OFS=$";" '/\.channel\..*-- START/ {print $1" "$2";"$6";tst1n"}' /opt/logs/server.log.$(date +%Y%m%d -d yesterday) | grep -vw 'priv.poller' > services_$(hostname).log exit
3. 后台执行SSH命令(可选)
如果允许脚本后台执行,添加-f参数让SSH在执行完命令后转到后台,避免阻塞PowerShell:
foreach($wiersz in $zm1.ParamValue -split ";") { cmd /c "ssh -f -i k4 user@$($wiersz) < script.sh" }
内容的提问来源于stack exchange,提问作者Marcin Krzyżanowski
相关产品推荐
相关产品推荐

