天天看點

批量修改root密碼

公司有五十多台伺服器。每台伺服器中使用的密碼完全不同,同時作業系統也不一樣,centos5,6,7 、ubuntu,windows都有,更不用提其中各種小版本。

root密碼定期更改是一個大問題(windows暫時不提)。

對于批量更改,首先想到的ansible,但是使用ansible有一個問題就是需要一台管理機,管理機需要通過将自己的ssh_key傳給被受體伺服器才可以正常使用

對于添加ssh_key,固然很麻煩。是以後面找到了

expect

這個指令

expect

指令預設伺服器中沒有,可以在阿裡的base源中找到,直接使用

yum install -y expect

進行安裝

直接看腳本

伺服器清單資訊
[root@bogon ~]# cat modifyrootpasswd.txt
##ip		           user    port    oldpw		newpw
##------------------------------------------------------------------------------------------------------
192.168.3.145    root    22	chunlanyy	PU4XdnIy3eWz7TM17OKniHoeBUnRMO1q
192.168.3.146    root    22	chunlanyy	70Zzm993Qnf13MGpBHaBgcvUX7pztwib
[root@bogon ~]# 

           

在excel表中,按上述格式,把舊密碼寫入,然後再批量直接将要修改的新密碼複制進入

密碼批量生成使用

tr

指令

[root@bogon ~]# tr -cd '[:alnum:]' < /dev/urandom | fold -w 32 | head -2
QSnDl7EuEXLUbgNf9jBuVm8P0x6zb3OT
wvk4ihCl7G2f0ISySu2COifr1tHtAp6C
           

其中head可以顯示多少行,然後直接copy至excel中,自動對齊

後将整個excel表的資訊copy至sublime中,形成文本rz至伺服器中即可

要注意的是,在伺服器資訊清單中,一定要cat一下文本的内容,注意linux和windows中不同分隔符的差別。

[root@bogon ~]# cat modifyrootpasswd.txt 
##ip	user	port	oldpw	newpw
192.168.3.145	root	22	chunlanyy	PU4XdnIy3eWz7TM17OKniHoeBUnRMO1q
192.168.3.146	root	22	chunlanyy	70Zzm993Qnf13MGpBHaBgcvUX7pztwib[root@bogon ~]# 
           

如果出現的像是這種,會導緻密碼修改失敗。

expect腳本
[root@bogon ~]# cat passwordmodify.sh 
#!/bin/bash
File=/root/modifyrootpasswd.txt

for Ip in `awk '/^[^#]/{print $1}' $File`;do
	User=`awk -v Var=$Ip '{if(Var==$1)print $2}' $File`
	Port=`awk -v Var=$Ip '{if(Var==$1)print $3}' $File`
	Oldpw=`awk -v Var=$Ip '{if(Var==$1)print $4}' $File`
	Newpw=`awk -v Var=$Ip '{if(Var==$1)print $5}' $File`
expect -c "
    spawn ssh -p $Port $User@$Ip
    set timeout 30
    expect {
        \"(yes/no)\" {send \"yes\r\";exp_continue}
        \"password:\" {send \"$Oldpw\r\";exp_continue}
        \"$User@*\" {send \"echo \'$Newpw\' |passwd --stdin $User\r exit\r\";exp_continue}
    }"
done
           

要注意的是

1.expect中的\r是出現互動的标示符

2.spawn是expect中的執行指令

小結:

相比于ansible,expect具有友善簡潔的作用,不受制于ssh_key。

但是缺點也很明顯,執行結果顯示并不直接,因為有一大堆互動内容顯示(完全模拟手動登陸),無法知曉更改結果,同時在伺服器密碼的生成也不夠自動化。

繼續閱讀