如何使用 expect 通过 ssh 连接到系统并更改主机系统的密码? [英] How do I use expect to connect via ssh to a system and change the password of the host system?
问题描述
我正在自动化以下过程:
使用用户名alpha"的密码alpha"通过 ssh 连接到名为alpha"的系统.连接后,我想设置 root 密码(设置为kickass").我连接的系统默认没有root密码.我编写了这个期望脚本来完成这项工作,但它不能始终如一地工作.它工作一次,然后如果我更改密码以再次测试,它会在发出sudo passwd root"后等待输入新的 UNIX 密码:"提示.有什么想法吗?
I am automating the process of:
Connect to a system named "alpha" via ssh with password "alpha" for username "alpha". Once connected I would like to set the root password (to "kickass"). The system I am connecting to doesn't have a root password by default. I wrote this expect script to do the job but it doesn't work consistently. It works once and then if I change the password to test again, it waits at the "Enter new UNIX password:" prompt after issuing "sudo passwd root". Any ideas?
#!/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
"
expect -exact "alpha@alpha:~$ "
send -- "sudo passwd root
"
expect -exact "password for alpha: "
send -- "alpha
"
expect -exact "new UNIX password: "
send -- "kickass
"
expect -exact "Retype new UNIX password: "
send -- "kickass
"
expect -exact "alpha@alpha:~$ "
send -- "exit
"
expect eof
谢谢.
推荐答案
扩展 Andrei Sfrent 的评论:
Expanding on Andrei Sfrent's comment:
Sudo 通常具有某种超时值,因此如果您在超时期限内发出第二个 sudo 命令,将不会再次要求您输入密码.您可以将代码修改为以下内容:
Sudo normally has some kind of time-out value, so that if you issue a second sudo command within the time-out period you will not be asked for your password again. You could modify the code to something like this:
send -- "sudo passwd root
"
expect {
-exact "password for alpha: "
{
send -- "alpha
"
exp_continue
}
-exact "new UNIX password: "
{
send -- "kickass
"
}
}
这篇关于如何使用 expect 通过 ssh 连接到系统并更改主机系统的密码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!