一、实现批量修改服务器用户名密码,以普通用户身份修改自己的用户名密码,普通用户需要有执行passwd管理员所能执行命令的权限,配置sudo权限;
1、修改服务器列表文件:服务器、用户名、密码配置文件
# cat old_info
# IP地址 用户 密码 端口
#-------------------------------
192.168.56.89 lgh 123456 22
192.168.56.90 lgh 123456 22
2、批量修改用户名密码脚本
# cat modpass.sh
#!/bin/sh
OLD_INFO=old_info
NEW_INFO=new_info
for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do
USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)
PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)
PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)
NEW_PASS=$(mkpasswd -l 8)
echo "$IP $USER $NEW_PASS $PORT" >> $NEW_INFO
expect -c "
spawn ssh -p$PORT $USER@$IP
set timeout 2
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$PASS\r\";exp_continue}
\"$USER@*\" {send \"echo \'$NEW_PASS\' |sudo passwd --stdin $USER\r exit\r\";exp_continue}
}"
done
二、实现批量修改服务器用户名密码,以root用户身份修改指定用户的用户名密码;
1、修改服务器列表文件:服务器、用户名、密码配置文件,此配置文件不需要普通用户的密码;
# cat old_info
# IP地址 用户 密码 端口
#-------------------------------
192.168.56.89 lgh 123456 22
192.168.56.90 lgh 123456 22
2、批量修改用户名密码脚本
# cat modpass.sh
#!/bin/sh
OLD_INFO=old_info
NEW_INFO=new_info
for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do
USER_ROOT=root
USER_ROOT_PASS=redhat
USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)
PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)
PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)
NEW_PASS=$(mkpasswd -l 8)
echo "$IP $USER $NEW_PASS $PORT" >> $NEW_INFO
expect -c "
spawn ssh -p$PORT $USER_ROOT@$IP
set timeout 2
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$USER_ROOT_PASS\r\";exp_continue}
\"$USER_ROOT@*\" {send \"echo \'$NEW_PASS\' |passwd --stdin $USER\r exit\r\";exp_continue}
}"
done