You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH登录后Shell提示符长时间延迟,Expect脚本执行异常求助

问题解决建议

你的Expect脚本在SSH登录后等待Shell提示符时出现异常延迟,核心原因多是提示符正则匹配不精准、SSH终端参数设置导致输出缓冲,或是expect逻辑拆分不合理。以下是针对性解决办法:

1. 精准匹配Shell提示符

默认的$prompt变量可能匹配范围模糊,建议根据实际Shell类型定义精准正则:

# 匹配bash/zsh常见提示符($、#、%结尾)
set prompt {[$#%>]$}
# 若为带用户名/主机名的自定义提示符,可更精准:
# set prompt "${user}@${host}:.*[$#%>]$"

2. 调整SSH终端参数

-t参数可能导致终端缓冲延迟,改用-tt强制分配伪终端,避免输出阻塞:

spawn ssh -tt -q -o StrictHostKeyChecking=no "$user@$host"

3. 合并expect逻辑减少等待

将等待提示符的操作合并到第一个expect块,避免额外的等待步骤:

set timeout 15
spawn ssh -tt -q -o StrictHostKeyChecking=no "$user@$host"
expect {
    -re "closed by remote host" { continue }
    -re "(P|p)assword: " { send "$pass\r"; exp_continue }
    -re $prompt { send -- "sudo passwd\r"; }
}

4. 单独设置expect超时

若全局timeout未生效,可为等待提示符的expect操作单独指定超时:

expect -timeout 5 -re $prompt

5. 开启调试排查匹配问题

添加exp_internal 1开启Expect调试模式,查看实际交互输出,确认提示符是否被正确识别:

exp_internal 1 ;# 输出所有交互细节,方便排查匹配问题
set timeout 15
spawn ssh -tt -q -o StrictHostKeyChecking=no "$user@$host"
...

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:50:37