bash 使用expect批量修改主机密码

bash 使用expect批量修改主机密码

最近总是有点迷糊,贴个脚本,利用expect的自动应答实现修改密码

第一种

根据反馈做出应答,这种模式需要匹配对应的字符串,

但:对于终端和服务器环境语言环境不一致时,要尤其注意!!!(尤其是中文和英文切换,可能脚本在服务器上可以正常使用,一旦你使用终端“中文环境”了,就无法使用了)

https://qnimg.ffing.cn/wp-content/uploads/2022/05/image-1.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0
#!/bin/bash
#实现:批量修改主机密码
#注:需要expect

#新密码
NEWPWD='8ik,*UJM'

#主机信息
echo '
#IPADD		USER	PWD
192.168.68.243	test1	123456
192.168.68.71	test1	123456
192.168.68.182	test1	123456

'>/dev/null

###############################################
#以下无需修改!!!
SHPATH=`readlink -f $0`


N=1
for i in $(grep "^[0-9]" $SHPATH)
do
if [ $N -eq 1 ];then 
	IPADD=$i
elif [ $N -eq 2 ];then 
	USER=$i
elif [ $N -eq 3 ];then 
	PWD=$i 
echo "old:$IPADD   $USER   $PWD"
echo "new:$IPADD   $USER   $NEWPWD"

#更新密码操作
expect <<EOF |grep success
        set timeout -1;
        spawn ssh $USER@$IPADD
        expect  {
                "yes/no" { send "yes\n";exp_continue }
                "s password:" { send "$PWD\n" }
        }
        expect "\n" { send "passwd\n" }
        expect  {
                "(current) UNIX password" { send "$PWD\n";exp_continue }
                "New password" { send "$NEWPWD\n";exp_continue }
                "Retype new password" { send "$NEWPWD\n" }
        }

        expect "\n" { send "exit\n" }
        expect eof
EOF
	echo "======================================"
	N=0
fi

let N++
done

第二种

不区分语言环境!!!根据密码出现次数进行修改,我passwd后出现3次密码

第一次旧密码,第二次新密码,第三次确认新密码!

(echo 《旧密码》;sleep 1;echo 《新密码》;sleep 1;echo《确认新密码》 )|passwd

注:这个是根据我的系统验证密码的次数做的排序,如果你次数不一样注意修改!

https://qnimg.ffing.cn/wp-content/uploads/2022/05/image.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0
#!/bin/bash
#实现:批量修改主机密码
#注:需要expect

#新密码
NEWPWD='8ik,*UJM'

#主机信息
echo '
#IPADD		USER	PWD
192.168.68.243	test1	123456
192.168.68.71	test1	123456
192.168.68.182	test1	123456

'>/dev/null

###############################################
SHPATH=`readlink -f $0`


N=1
for i in $(grep "^[0-9]" $SHPATH)
do
if [ $N -eq 1 ];then 
	IPADD=$i
elif [ $N -eq 2 ];then 
	USER=$i
elif [ $N -eq 3 ];then 
	PWD=$i 
echo "old:$IPADD   $USER   $PWD"
echo "new:$IPADD   $USER   $NEWPWD"

#更新密码操作
expect <<EOF |grep -E "success|成功"
        set timeout -1;
        spawn ssh $USER@$IPADD "(echo $PWD;sleep 1;echo $NEWPWD;sleep 1;echo $NEWPWD )|passwd"
        expect  {
                "yes/no" { send "yes\n";exp_continue }
                "s password:" { send "$PWD\n" }
        }
        expect eof
EOF
	echo "======================================"
	N=0
fi

let N++
done
good good study, day day up!

发表评论

textsms
account_circle
email

bash 使用expect批量修改主机密码
最近总是有点迷糊,贴个脚本,利用expect的自动应答实现修改密码 第一种 根据反馈做出应答,这种模式需要匹配对应的字符串, 但:对于终端和服务器环境语言环境不一致时…
扫描二维码继续阅读
2022-05-07