gpt4 book ai didi

bash - exp_close 和 exp_wait 之后预计脚本崩溃

转载 作者:行者123 更新时间:2023-12-02 09:36:55 27 4
gpt4 key购买 nike

我的目标是确定这些主机用于身份验证的 TACACS 服务器的 IP 地址。

当我运行脚本时,Unix 运算符(operator)提示(进程?)表填满了“已失效”。

根据在线研究,我认为“exp_close”和“exp_wait”可以消除这种情况。我添加了这些行。

如果我没记错的话,ssh 可以工作,但是当脚本退回到 telnet(因为这是允许的所有远程设备)时,脚本崩溃了。

请帮助我获得正确的语法,以便无论是否使用 SSH/telnet,脚本都能正常运行;谢谢!

(PS。Telnet 是我老板的选择,而不是我的选择;他目前不愿意改变)

spawn ssh -q $USER@$line

set ssh_id $spawn_id

expect {

eof {spawn telnet -l $USER $line}

}

expect {
eof {continue}
}

expect {
-re "\[Uu]sername" {send "$USER\r"}
}

expect {

"(yes/no)" { send "yes\r";exp_continue}
}

expect -re "\[Pp]assword:" {send "$pass\r"}
expect "#"


send "show run | include ip tacacs source-interface\r"
expect "#"
send "exit\r"

exp_close -i $ssh_id
exp_wait -i $ssh_id
}
exit 0
log_file

最佳答案

我预计切换到使用 telnet 时无法关闭用于 ssh 的 PTY 可能会导致一些问题,特别是在并行运行该脚本的大量实例时。因此,你会改变:

spawn ssh -q $USER@$line

set ssh_id $spawn_id

expect {

eof {spawn telnet -l $USER $line}

}

对此:

spawn ssh -q $USER@$line
set ssh_id $spawn_id

expect {
eof {
# Free up resources
close
wait
# Start up the alternative
spawn telnet -l $USER $line
# Save it's ID (in a now-poorly-named variable)
set ssh_id $spawn_id
}
}

除此之外,这很奇怪:

expect {
eof {continue}
}

除非在循环中,否则我不认为这是一个好主意。即便如此,这也不是一个好主意,因为在这种情况下它不会清理 PTY。你没有包含循环,所以我不知道这是否是问题所在。

最后,这部分也很奇怪:

expect {
-re "\[Uu]sername" {send "$USER\r"}
}

expect {

"(yes/no)" { send "yes\r";exp_continue}
}

expect -re "\[Pp]assword:" {send "$pass\r"}
expect "#"

您直接提供用户名,因此这个小序列的第一个 expect 子句应该是不必要的。其次,没有真正的理由将 exp_continue 与单个子句一起使用,除非您打算等待超时(默认情况下退出 expect)。最好将所有这些重写为:

expect {
"(yes/no)" { send "yes\r"; exp_continue }
-re "\[Pp]assword:" { send "$pass\r"; exp_continue }
"#" { list }
}

如果您必须在其中输入用户名(为什么?),那么这将成为期望中的另一个子句。不带参数的 list 命令实际上不执行任何操作,因为它的结果始终是空字符串(也是空列表)。

并且在退出之后写入log_file是没有意义的。达不到; exit 没有结果,因为它使进程退出...

关于bash - exp_close 和 exp_wait 之后预计脚本崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com