在应用ansible的实际状况中,有一个很现实的问题,ansible是须要对主机作ssh免密登录的,而挨个对主机作免密是很是的繁琐的,挨个敲IP不只很是的繁琐并且容易出错,为解决这个问题,为之后使用ansible时的便捷,写了一个小脚本,实现批量对主机的免密配置:bash
#!/bin/bash #在根目录下建立address文件,一行一个ip地址,将全部须要免密的主机ip填入 User=root #ssh免密的帐户 passWord=123 #ssh免密主机的密码 address=`cat /address` rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null #检测sshpass软件包是否安装
if [ $? -gt 0 ];then YumBuild yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit) fi [ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh echo "正在建立密钥对...." rm -rf ~/.ssh/id_rsa ~/.ssh/id_rsa.pub #建立密钥文件 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 #调用/address的相关的ip信息进行ping测试,不通则跳过,通则对主机进行免密配置 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的必不会是新手,这种低级错误应该不会发生。网络