我试图使用期望脚本来更改我的密码在多个服务器上,但我有点困惑如何将服务器列表传递给它。如何将多个服务器传递给期望脚本?
,我使用的脚本如下:
#!/usr/bin/expect -f
# wrapper to make passwd(1) be non-interactive
# username is passed as 1st arg, passwd as 2nd
set username [lindex $argv 0]
set password [lindex $argv 1]
set serverid [lindex $argv 2]
set newpassword [lindex $argv 3]
spawn ssh -t $serverid passwd
expect "assword:"
sleep 3
send "$password\r"
expect "UNIX password:"
sleep 3
send "$password\r"
expect "password:"
sleep 3
send "$newpassword\r"
expect "password:"
sleep 3
send "$newpassword\r"
expect eof
而且我试图运行它是这样:
[[email protected] ~]$ ./setkey1 blah password 'cat serverlist' meh
这给了我下面的输出:
spawn ssh -t cat serverid passwd
ssh: cat serverid: Name or service not known
send: spawn id exp6 not open
while executing
"send "$password\r""
(file "./setkey1" line 13)
所以我试着运行下面的循环:
[[email protected] ~]$ for i in serverid; do `cat serverid`; ./setkey1 blah password $i meh; done
这给了我如下:
-bash: staging01v: command not found
spawn ssh -t serverid passwd
ssh: serverid: Name or service not known
send: spawn id exp6 not open
while executing
"send "$password\r""
(file "./setkey1" line 13)
如果我尝试使用expect脚本,只是在一个服务器名称输入,它的工作原理是......嗯......期待。
我在做什么错?
有趣。因此,要清楚,我更换: 组用户名[LINDEX $ ARGV 0] 设置的密码[LINDEX $ ARGV 1] 组服务器ID [LINDEX $ ARGV 2] 设定新密码[LINDEX $ ARGV 3] 与 的foreach {用户名密码新密码} $ argv的突破 组服务器[lrange $ argv的3月底] 的foreach服务器ID $服务器{ #现有的代码放在这里 } 这看起来像它使一个很大的意义。 非常感谢! –
在'foreach'循环内将会是你的产卵,期望和发送语句。 –
非常感谢Glenn的帮助。 –