應用場景:
在應用ansible的實際情況中,有一個很現實的問題,ansible是需要對主機做ssh免密登陸的,而挨個對主機做免密是非常的繁瑣的,挨個敲IP不僅非常的繁瑣而且容易出錯,為解決這個問題,為以后使用ansible時的便捷,寫了一個小腳本,實現批量對主機的免密配置:
#!/bin/bash
#在根目錄下創建address文件,一行一個ip地址,將所有需要免密的主機ip填入
User=root
passWord=123
address=`cat /address`
rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
if [ $? -gt 0 ];then
yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit)
fi
[ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh
echo "正在創建密鑰對...."
rm -rf ~/.ssh/*
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" &>/dev/null
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
for ip in $address
do
ping $ip -c1 &>/dev/null
if [ $? -gt 0 ];then
echo "$ip無法ping通請檢查網絡"
continue
fi
sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${User}@$ip &>/dev/null
echo "$ip 密鑰分發成功"
done
小結:
需要注意的是,對第一次免密配置失敗的主機,不可再用此腳本進行第二次配置,否則第一次配置成功的機器會失效,可以將腳本中創建密鑰的部分注釋,然后進行配置,最后,需要注意的是,腳本調用的IP地址的信息來自於/address文件中的信息,腳本中並沒有寫出判斷,想來能應用ansible的必不會是新手,這種低級錯誤應該不會發生。
