【发布时间】:2011-06-01 19:07:21
【问题描述】:
我正在自动化以下过程:
使用用户名“alpha”的密码“alpha”通过 ssh 连接到名为“alpha”的系统。连接后,我想设置 root 密码(设置为“kickass”)。我连接的系统默认没有root密码。我编写了这个期望脚本来完成这项工作,但它不能始终如一地工作。它工作一次,然后如果我更改密码以再次测试,它会在发出“sudo passwd root”后等待“输入新的 UNIX 密码:”提示。有什么想法吗?
#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
set force_conservative 1 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
set timeout -1
spawn ssh alpha@$arg1
match_max 100000
expect -exact "password: "
send -- "alpha\r"
expect -exact "alpha@alpha:~\$ "
send -- "sudo passwd root\r"
expect -exact "password for alpha: "
send -- "alpha\r"
expect -exact "new UNIX password: "
send -- "kickass\r"
expect -exact "Retype new UNIX password: "
send -- "kickass\r"
expect -exact "alpha@alpha:~\$ "
send -- "exit\r"
expect eof
谢谢。
【问题讨论】:
-
如果可以的话,最好在
expect命令中使用短字符串。仅包含提示的最后几个字符可能会有所不同。 -
试过这个。没用 :(。我不明白为什么它第一次有效,然后如果我更改脚本中的密码并再次运行它就会失败。
-
也许 sudo 第二次工作时不需要密码。
标签: bash passwords ssh expect passwd