我希望在expect
之后制作一个以spawn "ssh user@server"
首播的脚本。
上例:
我有5台服务器,但所有服务器都与初始promt不同,我无法修改:
[root@test home]#
root@server2:~$
User: root Server: server3 ~ !
你明白了。
这就是我的想法,但我无法弄清楚如何获得
set timeout -1
spawn "ssh root@server"
expect "assword:"
send "password\n"
#
var=getpromt
#
expect "$var"
send "stuff\n"
expect eof
我如何才能将这些承诺提供给一个能够识别出该承诺的预期脚本?
答案 0 :(得分:2)
我会保留一系列正则表达式:
array set prompt_re {
test {#\s*$}
server2 {$\s*$}
server3 {!\s*$}
}
spawn ssh $user@$host
expect assword:
send "$password\r"
expect -re $prompt_re($host)
或者,你可以把它们混合成一个正则表达式
expect -re {[#$!]\s*$} ;# expect the prompt.
答案 1 :(得分:0)
试试这个(伪代码):
echo commands-to-be-executed-on-ssh | expect-script
&安培;你的expect-script看起来像是:
set timeout -1
spawn "ssh root@server"
expect "assword:"
send "password\n"
interact # <~~~~~~~~~~~ At this point, expect would pass the redirected/piped stdin to ssh process.
注意:我还没有测试过这个。所以语法错误道歉:)