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

Expect脚本自动发送响应失效问题求助

Expect脚本自动发送响应失效问题求助

Hey there,看了你的脚本和调试输出,我发现问题出在对SSH连接时的提示判断上,咱们一步步捋清楚:

首先看你的调试日志,脚本一直在重复匹配*(RSA) to the list of known hosts.*这个模式,然后发送yes\r,陷入了循环——但实际上这个提示是SSH已经自动把主机添加到known_hosts列表的警告信息,根本不需要你回复yes!真正需要回复yes的是第一次连接时的询问:Are you sure you want to continue connecting (yes/no)?,你的脚本完全搞混了这两种提示。

因为脚本一直在处理这个不需要回复的警告,导致它根本没机会去匹配后面的Ticketing system (JIRA or SNOW):提示,直到超时之后,这个提示才出现,但脚本已经停止等待了。

修正后的脚本

#!/usr/bin/expect -f

set server_ip "<server>"

spawn ssh -A $server_ip

expect {
    # 只匹配真正需要确认的添加主机提示
    "*Are you sure you want to continue connecting (yes/no)?*" {
        send "yes\r"
        exp_continue  # 继续等待后续提示
    }
    # 忽略已添加主机的警告信息,直接继续等待
    "*Permanently added '*' (RSA) to the list of known hosts.*" {
        exp_continue
    }
    # 匹配票务系统的询问
    "*Ticketing system (JIRA or SNOW):*" {
        send "JIRA\r"
    }
}

interact

为什么这样改?

  • 咱们把匹配目标改成了真正需要用户确认的Are you sure...提示,只有这个时候才需要发送yes。
  • 对于那个已添加主机的警告,我们只做exp_continue,不发送任何内容,让脚本直接跳过这个信息,继续等待后面的票务系统询问。
  • 这样脚本就不会陷入无效的循环,能正常匹配到你需要处理的Ticketing提示并发送响应。

你可以用expect -d再运行一遍修正后的脚本,看看调试日志,应该就能正常走到发送JIRA的步骤了。

备注:内容来源于stack exchange,提问作者Sreekanth Chityala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:52:58