工做中常遇到puppet服務端/客戶端證書認證異常,須要從新生成證書。常見操做會刪除服務端/客戶端證上相關的老證書,而後生成新證書。針對這種狀況,編寫了一個shell腳本,只需將此腳本在Client端定時運行便可。因爲腳本中涉及到了明文密碼,爲了提升安全性,能夠考慮對此腳本進行加密(可參考: http://lxsym.blog.51cto.com/1364623/768286 )
#!/bin/bash
# 對客戶端異常從新頒佈puppet證書
# 2012/05/30 Richard Shen
SIP="192.168.11.6" #server端ip
SPASSWD="hello" #server端root密碼,
host=`hostname`
s_dns=".dns.abc.com.pem" #內部DNS解析Host-IP對應,根據實際狀況而定
s_ca_name="$host$s_dns" #$host在server端的證書文件
R_NUM=`/usr/sbin/puppetd --test --server pup-ser-01.dns.abc.com | grep "notice: Finished" | wc -l`
[ ! -f /usr/bin/nc ] && yum -y install nc
[ ! -f /usr/bin/expect ] && yum -y install expect
#LOGIN PUPPET SERVER
auto_smart_ssh () {
expect -c "set timeout -1;
spawn ssh -o StrictHostKeyChecking=no $2 ${@:3};
expect {
*assword:* {send -- $1\r;
expect {
*denied* {exit 2;}
eof
}
}
eof {exit 1;}
}
"
# return $?
}
#判斷正常與否,進行2次
i=0
while [[ $i -lt 2 ]]
do
if [ $R_NUM -ne 1 ];then
rm -rf /var/lib/puppet/ssl/*
auto_smart_ssh $SPASSWD root@$SIP rm -rf /var/lib/puppet/ssl/ca/signed/$s_ca_name
/usr/sbin/puppetd --test --server pup-ser-01.dns.abc.com
else
echo "$host puppet client is ok"
fi
let i=i+1
done
分享快樂,若你們有什麼好的想法,能夠交流一下~歡迎轉載 - -shell