Linux/Aix系统下使用expect和passwd命令批量修改用户,遇到的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux/Aix系统下使用expect和passwd命令批量修改用户,遇到的问题相关的知识,希望对你有一定的参考价值。

背景:开发项目组服务器众多,出于安全考虑,要求每两个月改一次密码,但是服务器太多,分别登陆每一台服务器用passwd密码改密码太麻烦,所以想使用expect和passwd命令批量修改用户密码,服务器信息维护在old_info文件中,通过其中一台服务器ssh到其他服务器自动执行passwd命令修改密码,但是在使用过程中遇到了如下问题,请各位大神看下如何解决,谢谢。
$ pwd
/home/wasadmin/password

$ cat old_info
# ip user oldpasswd port newpasswd
#------------------------------------------------------------
21.96.164.128 cbuser Q!w2E#r4 22 ZAQ!xsw2

$ cat change_pass.sh
#!/bin/bash
OLD_INFO=~/password/old_info
NEW_INFO=~/password/new_info
for IP in `awk '/^[^#]/print $1' $OLD_INFO`; do
USER=`awk -v I=$IP 'if(I==$1)print $2' $OLD_INFO`
oldpasswd=`awk -v I=$IP 'if(I==$1)print $3' $OLD_INFO`
PORT=`awk -v I=$IP 'if(I==$1)print $4' $OLD_INFO`
newpasswd=`awk -v I=$IP 'if(I==$1)print $5' $OLD_INFO`
echo "$IP $USER $newpasswd $PORT" >> $NEW_INFO
expect -c "
spawn ssh -p$PORT [email=$USER@$IP]$USER@$IP[/email]
set timeout 2
expect
\"password:\" send \"$oldpasswd\r\";exp_continue
\"]*\" send \"LANG=en_US\r\";exp_continue
\"\$*\" send \"passwd $USER\r\";exp_continue
\"Old password:\" send \"$oldpasswd\r\";exp_continue
\"New password:\" send \"$newpasswd\r\";exp_continue
\"new password again:\" send \"$newpasswd\r\";exp_continue
"
done
$ sh change_pass.sh
spawn ssh -p22 cbuser@21.96.164.128
cbuser@21.96.164.128\'s password:
前面的命令都能正常执行,就是输入新密码的时候,总是报错,感觉好像是$newpasswd这个参数的值没获取到,但是通过“echo "$IP $USER $newpasswd $PORT" >> $NEW_INFO ”写到NEW_INFO文件中,又是对的,所以搞不懂到底是啥情况,请大神高手赐教,感谢。

参考技术A 秦时明月汉时关,万里长征人未还. 参考技术B 过其中一台服务器ssh到其他服务器

以上是关于Linux/Aix系统下使用expect和passwd命令批量修改用户,遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

AIX下挂载Linux文件系统nfs-vmount: Operation not permitted

WINDOWS下使用EXPECT的简单例子

linux下用expect spawn时的问题

aix 系统报错,怎么解决

linux下expect环境安装

Linux expect 详解