gpt4 book ai didi

linux - expect script + fit expect 以防不需要密码

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:21 27 4
gpt4 key购买 nike

当 Linux 机器的 $IP 登录后询问密码时,下面的 expect 脚本工作正常

但在某些情况下,某些Linux机器不需要ssh密码(我们可以不用密码登录),

所以我需要更改我的期望脚本以支持没有密码的机器

请建议如何适合我的期望脚本以支持有密码的机器和没有密码的机器

 * target of the following expect script is to check the hostname on remote Linux machine


expect_test=`cat << EOF
set timeout -1
spawn ssh $IP hostname
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
}
expect eof
EOF`



expect -c "$expect_test"

远程机器上的 exe 示例(带密码)(远程机器的名称 - Linux1_machine)

  IP=10.17.18.6

expect -c "$expect_test"

spawn ssh 10.17.18.6 hostname
sh: /usr/local/bin/stty: not found
This computer system, including all related equipment, networks and network devices (specifically including Internet access),is pros
yes
Password:
Linux1_machine

在不需要密码登录的机器上执行expect脚本的例子

 IP=10.10.92.26


expect -c "$expect_test"


spawn ssh 10.10.92.26 hostname
sh: /usr/local/bin/stty: not found
Linux15_machine
expect: spawn id exp5 not open
while executing
"expect eof"

最佳答案

您有几个选择。

如果您知道不需要登录的服务器会发生什么(例如, session 直接进入提示符),那么添加一个 expect 语句:

expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
"prompt" { do something }
}

如果您没有一致的提示,您可以 try using a Regular Expression检测范围广泛的提示:

set prompt “(%|#|\\$) $” ;# default prompt
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
-re $prompt { do something }
}

如果您根本不知道会得到什么(似乎不太可能),那么您还可以在 Expect 超时时添加一个操作。

expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
timeout { do something }
}

这将允许 expect 在未收到其他预期行时移动。

参见 http://wiki.tcl.tk/11583有关您要执行的操作的具体示例。此外,Getting Started with Expect chapter from the Oreilly book值得一读。

关于linux - expect script + fit expect 以防不需要密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9569733/

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