需求:服务器安全策略要求定期更换服务器root密码。

思路:交互式的考虑,需了解公钥加密知识;然后通过执行ssh命令达到自动化更改root密码的目的。

操作:主要分三部分,先是自己的电脑与远程服务器实现公钥加密方式远程登录,然后是创建一个ip列表的文本文档,最后执行批量修改root密码的脚本。

具体:这里只介绍最后部分脚本的内容,其他不难理解。脚本如下

#!/bin/bash
#filename:piroot.sh
#Environment:Centos 5.2

#definition variable#############################################
ip_list=`cat /home/ip_list.txt`

#definition function PWD#########################################
function pwdgen {
        strUp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
       strLow="abcdefghijklmnopqrstuvwxyz"
       strNum="0123456789"
       passLen="8"
       while [ "${#pass} -le "passLen" ]
           do        
                 passUp="${strUp:$(($RANDOM%${#strUp})):1}"        
                 passLow="${strLow:$(($RANDOM%${#strLow})):1}"        
                 passNum="${strNum:$(($RANDOM%${#strNum})):1}"        
                 pass="$pass$passUp$passLow$passNum"    
           done    
           echo ${pass:0:$passLen}
}

#change PWD way##################################################
read -p "密码随机生成输入a;密码手动生成输入b: " way
  if [ $way = a ]; then
TMP_PWD=`pwdgen`
elif [ $way = b ]; then
read -p "请输入要设置的密码:" TMP_PWD
else
echo " 输入错误! "
exit
fi

#密码修改执行####################################################
for IP in $ip_list; do
echo $TMP_PWD > TMP_PWD.txt
ssh $IP passwd root --stdin < TMP_PWD.txt
if [ $? = 0 ]; then
    echo -e "$(date "+%Y-%m-%d %H:%M:%S")\t${IP}\t${TMP_PWD}\t" >> pwd_$(date +%Y-%m-%d).log
else
    echo -e "$(date "+%Y-%m-%d %H:%M:%S")\t${IP} Password change fails\tplease check!\t" >> fails_$(date +%Y-%m-%d).log
fi
done
rm -fr TMP_PWD.txt
echo "所有主机的密码修改完成,请查看pwd_$(date +%Y-%m-%d).log文件!"

讲解:以上脚本内容难理解的就是标记红色的部分。