脚本目的:批量修改linux系统root用户密码

条件:必须是修改的用户是root,因为只有root才有权限使用passwd命令

说明:先把IP、用户、密码、端口信息写到old_info文件中,脚本从这个文件读取对应的信息,利用expect免交互登陆系统。将随机生成的8位密码修改为root用户新密码。然后将新密码保存到net_info文件中.

[[email protected] test1]# cat old_info 

#     ip     user    passwd    port

#------------------------------------------------

192.168.1.181  root    admini123     22

192.168.1.182  root    admini123     22

linux系统批量修改root用户密码

[[email protected] test1]# cat change_pass.sh 

#! /bin/bash

old_info=/opt/test1/old_info

new_info=/opt/test1/new_info

for ip in `awk '/^[^#]/{print $1}' $old_info`

do

    user=`awk -v I=$ip '{if(I==$1)print $2}' $old_info`

    pass=`awk -v I=$ip '{if(I==$1)print $3}' $old_info`

    port=`awk -v I=$ip '{if(I==$1)print $4}' $old_info`

    new_pass=`mkpasswd -l 8`       #mkpasswd生成随机密码

    echo "$ip    $user    $new_pass    $port" >> $new_info

expect -c "

      spawn ssh -p$port [email protected]$ip       #spawn执行一个命令

      set timeout 2                     #设置超时

      expect {

          \"(yes/no)\" {send \"yes\r\";exp_continue}

          \"password:\" {send \"$pass\r\";exp_continue}

          \"[email protected]*\" {send \"echo \'$new_pass\' |passwd --stdin $user\r exit\r\";exp_continue}

 }"

done

linux系统批量修改root用户密码

结果:

linux系统批量修改root用户密码


参数说明:

set:可以设置超时,也可以设置变量

timeout:expect超时等待时间,默认10S

spawn:执行一个命令

expect "":匹配输出的内容

exp_continue:继续执行下面匹配

\r:可以理解为回车

awk -v I="$ip":赋值变量

expect{...}:输入多行记录

mkpasswd:可参考以下网址:http://www.linuxidc.com/Linux/2012-11/73687.htm


本文章参考了:

http://lizhenliang.blog.51cto.com/7876557/1674791