批量修改密码脚本
寫了個批量修改用戶密碼的腳本,只適合于多臺機器密碼用戶名完全相同的場合。
重復完成一個工作的任務
功能實現先用user用戶登錄系統,然后切換到root用戶修改root用戶的密碼和user用戶的密碼,系統安全策略禁止root用戶直接ssh登錄系統。
一共有三個文件
第一個?
changepas.sh文件,主腳本調用expect腳本,讀取ipadd文件內容,修改密碼。
#!/bin/bash
#趙云
#使用前請確保本機已經安裝expect包
#腳本提供循環(huán)IP地址給expect腳本執(zhí)行,修改批量密碼功能
#只實現相同用戶相同密碼的操作。
#2012年3月2日 ?
#判斷有幾個服務器IP地址
number=`cat ipadd? |grep -v ^$ |grep -v '#'? |wc -l`
rpm -qa |grep expect &>/dev/null
if [ $? -eq 0 ] ; then
? #執(zhí)行循環(huán),一次修改每個服務器的用戶密碼
? for ((i=1;i<=$number;i++))
? do
??? #提取IP地址
??? ip=`cat ipadd? |grep -v ^$ |grep -v '#' |head -n $i |tail -n 1`
??? time=`date +"%F %T"`
??? ./expect.sh $ip?
??? level=`echo $?`
??? #記錄修改成功與失敗的日志
???? [? $level -eq 0 ] && echo "$time change password ok $ip " >> changepass.log?
???? [ $level -eq 1 ] &&? echo "$time $ip yw 用戶密碼不正確,禁止登錄,修改密碼失敗" >> changepass.log?????? ?
???? [ $level -eq 2 ] && echo "$time $ip root? 用戶密碼不正確,禁止登錄,修改密碼失敗" >> changepass.log?
???? [ $level -eq 3 ] && echo "$time? $ip 非root用戶登錄,修改密碼失敗" >> changepass.log
???? [ $level -eq 4 ] && echo "$time? $ip 連接超時,修改密碼失敗" >> changepass.log
???? [ $level -eq 5 ] && echo "$time? $ip 連接失敗,主機拒絕連接,修改密碼失敗" >> changepass.log
? done
else
? echo "請安裝expect工具\n"
fi
第二個腳本文件,expect腳本。
[root@localhost scripts]# cat expect.sh?
#!/usr/bin/expect -f
#在此修改用戶密碼參數
#設置密碼變量
####################
##??????????????? ##
## 需要修改部分?? ##
##??????????????? ##
####################
?
#user用戶的密碼
set ypass 123pass
#root用戶的密碼
set pass? 1234567
#新user用戶的密碼
set newypass 456pass
#新root用戶的密碼
set newpass 123456
#設置服務器端口
set port 22
#######################
##?????????????????? ##
##? 程序運行部分???? ##
##?????????????????? ##
#######################
#設置服務器IP地址
set ip [ lindex $argv 0 ]
spawn ssh -p $port user@$ip
expect "Connection refused" {exit 5}
expect {
???? "yes/no" {
???????? send "yes\n";
?????????? }
????? }
expect "*password:"
send "$ypass\r"
expect "please try again" {exit 1 }
expect "user@*"
set timeout 3
send "su - root\r"
expect "*password:"
send "$pass\r"
expect "incorrect*" {exit 2 }
expect "su: 密碼不正確" {exit 2 }
expect "root@*"
set timeout 1
send "echo $newypass |passwd user --stdin\n"
expect "Only root can do that." {exit 3 }
expect "successfully."
send "echo $newpass |passwd root --stdin\n"
expect "Only root can do that." {exit 3 }
expect "successfully."
send "exit\n"
expect "user@"
send "exit\n"
interact?
第三個文件,地址池。
[root@localhost scripts]# cat ipadd?
#填寫要修改的服務器ip地址
10.102.102.248
192.168.0.26
192.168.0.44
192.168.0.12
日志記錄,修改成功與否記錄日志
2012-03-03 15:22:05 10.102.102.248 user用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:22:32 192.168.0.26 user 用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:24:21 10.102.102.248 root? 用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:24:47 192.168.0.26 root? 用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:54:39? 10.102.102.248 連接超時,修改密碼失敗
2012-03-03 15:55:09? 192.168.0.26 連接超時,修改密碼失敗
2012-03-03 15:55:39? 192.168.0.44 連接失敗,主機拒絕連接,修改密碼失敗
2012-03-03 15:18:45 change password ok 10.102.102.248?
重復完成一個工作的任務
功能實現先用user用戶登錄系統,然后切換到root用戶修改root用戶的密碼和user用戶的密碼,系統安全策略禁止root用戶直接ssh登錄系統。
一共有三個文件
第一個?
changepas.sh文件,主腳本調用expect腳本,讀取ipadd文件內容,修改密碼。
#!/bin/bash
#趙云
#使用前請確保本機已經安裝expect包
#腳本提供循環(huán)IP地址給expect腳本執(zhí)行,修改批量密碼功能
#只實現相同用戶相同密碼的操作。
#2012年3月2日 ?
#判斷有幾個服務器IP地址
number=`cat ipadd? |grep -v ^$ |grep -v '#'? |wc -l`
rpm -qa |grep expect &>/dev/null
if [ $? -eq 0 ] ; then
? #執(zhí)行循環(huán),一次修改每個服務器的用戶密碼
? for ((i=1;i<=$number;i++))
? do
??? #提取IP地址
??? ip=`cat ipadd? |grep -v ^$ |grep -v '#' |head -n $i |tail -n 1`
??? time=`date +"%F %T"`
??? ./expect.sh $ip?
??? level=`echo $?`
??? #記錄修改成功與失敗的日志
???? [? $level -eq 0 ] && echo "$time change password ok $ip " >> changepass.log?
???? [ $level -eq 1 ] &&? echo "$time $ip yw 用戶密碼不正確,禁止登錄,修改密碼失敗" >> changepass.log?????? ?
???? [ $level -eq 2 ] && echo "$time $ip root? 用戶密碼不正確,禁止登錄,修改密碼失敗" >> changepass.log?
???? [ $level -eq 3 ] && echo "$time? $ip 非root用戶登錄,修改密碼失敗" >> changepass.log
???? [ $level -eq 4 ] && echo "$time? $ip 連接超時,修改密碼失敗" >> changepass.log
???? [ $level -eq 5 ] && echo "$time? $ip 連接失敗,主機拒絕連接,修改密碼失敗" >> changepass.log
? done
else
? echo "請安裝expect工具\n"
fi
第二個腳本文件,expect腳本。
[root@localhost scripts]# cat expect.sh?
#!/usr/bin/expect -f
#在此修改用戶密碼參數
#設置密碼變量
####################
##??????????????? ##
## 需要修改部分?? ##
##??????????????? ##
####################
?
#user用戶的密碼
set ypass 123pass
#root用戶的密碼
set pass? 1234567
#新user用戶的密碼
set newypass 456pass
#新root用戶的密碼
set newpass 123456
#設置服務器端口
set port 22
#######################
##?????????????????? ##
##? 程序運行部分???? ##
##?????????????????? ##
#######################
#設置服務器IP地址
set ip [ lindex $argv 0 ]
spawn ssh -p $port user@$ip
expect "Connection refused" {exit 5}
expect {
???? "yes/no" {
???????? send "yes\n";
?????????? }
????? }
expect "*password:"
send "$ypass\r"
expect "please try again" {exit 1 }
expect "user@*"
set timeout 3
send "su - root\r"
expect "*password:"
send "$pass\r"
expect "incorrect*" {exit 2 }
expect "su: 密碼不正確" {exit 2 }
expect "root@*"
set timeout 1
send "echo $newypass |passwd user --stdin\n"
expect "Only root can do that." {exit 3 }
expect "successfully."
send "echo $newpass |passwd root --stdin\n"
expect "Only root can do that." {exit 3 }
expect "successfully."
send "exit\n"
expect "user@"
send "exit\n"
interact?
第三個文件,地址池。
[root@localhost scripts]# cat ipadd?
#填寫要修改的服務器ip地址
10.102.102.248
192.168.0.26
192.168.0.44
192.168.0.12
日志記錄,修改成功與否記錄日志
2012-03-03 15:22:05 10.102.102.248 user用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:22:32 192.168.0.26 user 用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:24:21 10.102.102.248 root? 用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:24:47 192.168.0.26 root? 用戶密碼不正確,禁止登錄,修改密碼失敗
2012-03-03 15:54:39? 10.102.102.248 連接超時,修改密碼失敗
2012-03-03 15:55:09? 192.168.0.26 連接超時,修改密碼失敗
2012-03-03 15:55:39? 192.168.0.44 連接失敗,主機拒絕連接,修改密碼失敗
2012-03-03 15:18:45 change password ok 10.102.102.248?
2012-03-03 15:19:12 change password ok 192.168.0.26?
本文轉自zhaoyun00 51CTO博客,原文鏈接:http://blog.51cto.com/zhaoyun/794987
總結
- 上一篇: 孔夫子搬家的下一句
- 下一篇: 白象家族读后感100字