Ansible 密钥分发

Posted 系统运维分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible 密钥分发相关的知识,希望对你有一定的参考价值。

自动化运维的概念越来越深入人心,而且随着云计算崛起,也越发重要。那么传统的自动化运维工具有Puppet、Ansible、Saltstack。各有各的优点,但是ansible是比较特别一个,他不需要agent端。Github上的热度越来越高。笔者使用Ansible确实对比起来更方便,更好玩。因为不需要agent,是通过ssh控制被控机的。所以SSH密钥免密码是最方便的认证方式。但是当机器数量很大时候手动复制公钥就很低效了。那么通过脚本来密钥分发是必不可少的。

当然,也不是十全十美的。需要以下条件或者建议。

1、客户端需要统一的管理账号xxx,密码尽量复杂些,通过密码生成器生成(不建议用root)

2、在sudoer文件中配置管理账号 :xxx ALL=(ALL) NOPASSWD:ALL

好了,接下来就是主角了。两个脚本(expect和shell)

expect 脚本:这是一个交互的脚本语言。

#!/usr/bin/expect

if { $argc !=2 } {

send_user "usege:expect fenfa_sshkey.exp file host" #这里是使用方法

exit

}

#define var

set file [lindex $argv 0] ##expect 变量的设置方法和shell不一样。

set host [lindex $argv 1]

set password "密码" ##这里是管理账号的密码,客户机都一样的。

spawn ssh-copy-id -i $file "管理账号@$host" ##spawn后面跟执行的命令

expect { ##expect顾名思义是期待的意思

"yes/no" {send "yes";exp_continue} ##期待到yes/no,就发送yes,然后继续

"*password" {send "$password"}

}

expect eof

shell脚本:对上述脚本进行循环各个客户端机器。

#!/bin/bash

. /etc/init.d/functions

for ip in `cat iplist` #这里是单独一个文件保存被控端IP

do

expect fenfa_sshkey.exp ~/.ssh/id_rsa.pub $ip #执行上述exp脚本

if [ $? -eq 0 ];then #这是一个反馈意思上一条命令成功如果是0标识成功

action "$ip" /bin/true #那么就ok。这里action是一个function函数(开头引用的)

else

action "$ip" /bin/false

fi

done


以上是关于Ansible 密钥分发的主要内容,如果未能解决你的问题,请参考以下文章

Ansible | 首次使用时密钥分发问题

ssh密钥分发与ansible部署指南

自动化运维Ansible之安装部署

自动化运维Ansible安装部署及使用

ansible一键部署NFS挂载

ansible的安装使用