批量修改远程linux服务器密码
第一种方法通过expect批量修改linux服务器用户名和密码
公司现在有100多台服务器,需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2 模块,不得不承认用php 来处理这样的任务是一件很纠结的事情,然后又想到了用shell,不过发现很快就写不下去了,shell 的交互能力还是不能让人恭维的,最后发现了expect,expect 以其强大的交互能力,无疑是处理这类任务的首选,再加上expect 可以内嵌shell,这使得他变得更强大。
首先要有一个服务器的ip列表,把要处理的ip放在里面
.....
然后是shell脚本
#!/bin/bash
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$1" = "--help" ] [ "$1" = "-h" ]
then
echo "usage: path/iplist path/adduser"
exit
fi
cat $1 | while read line
do
[ -z $line ] && continue
$2 $line;
done
echo -e "\n well done\n"
下面是最重要的部分 adduser
#!/usr/bin/expect
#登录的用户名
set loginuser ""
#密码
set loginpass ""
#要修改的用户名
set passuser "dfdjfk"
#要修改成的新密码
set newpass "your new password"
#要添加的新的用户名
set newusername "newusername"
#要添加的新用户的密码
set newpasswd "newpasswd"
set ipaddr [lrange $argv 0 0]
set timeout 300
set cmd_prompt "]#|~]?"
#---------------------------------------------------通过ssh 登录
spawn ssh $loginuser@$ipaddr
set timeout 300
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
} -re "assword:" {
send "$loginpass\r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} timeout {
exit
} eof {
exit
}
}
expect {
-re "assword:" {
send "$loginpass\r"
}
-re $cmd_prompt {
send "\r"
}
}
#-------------------------------------------修改密码
send "passwd $passuser \r";
expect {
"New UNIX password:" {
send "$newpass\r"
}
"passwd: Only root can specify a user name." {
exit
}
}
expect {
"Retype new UNIX password:" {
send "$newpass\r"
}
}
#------------------------------------------------------添加一个新用户并改密码
expect -re $cmd_prompt
sleep 1
send "useradd $newusername \r"
sleep 1
send "passwd $newusername \r";
expect {
"New UNIX password:" {
send "$newpassw
远程批量修改linux服务器密码的脚本 来自淘豆网m.daumloan.com转载请标明出处.