一 概况:
不需要安装客户端,通过sshd去通信
基于模块工作,模块可以由任何语言开发
不仅支持命令行使用模块,也支持编写yaml格式的playbook
支持sudo
有提供UI(浏览器图形化)www.ansible.com/tower 10台主机以内免费
开源UI https://github.com/alaxli/ansible_ui 文档 http://download.csdn.net/detail/liyang23456/7741185
二 安装:只需要安装服务端,客户端不需要安装任何东西
两台机器 172.7.15.106 172.7.15.111
只需要在106上安装ansible即可
yum install -y epel-release
yum install -y ansible
安装完成之后,编辑/etc/ansible/hosts 去添加你要管理的主机
[test]
192.168.6.220
192.168.10.227
三 设置秘钥,用来免密码管理
#################用哪个用户生成的密钥,就必须放到哪个用户的家目录里面
106上生成密钥对
ssh-keygen -t rsa 直接回车即可,不用设置密钥密码
把公钥(id_rsa.pub)内容放到对方机器(111)的/root/.ssh/authorized_keys里面
方法:scp .ssh/id_rsa.pub 172.7.15.111:/root/.ssh/authorized_keys
本机也要操作
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
关闭selinux
setenforce 0
如何验证你的秘钥是否成功,可以用ssh 客户端ip 然后看看是否要输入密码,如果直接连接就代表你的秘钥成功了。
ssh root@172.7.15.111
四 常用模块
4.1ping模块
[yx@localhost ~]$ ansible test -m ping
192.168.6.220 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.10.227 | SUCCESS => {
"changed": false,
"ping": "pong"
4.2 常用远程命令模块(command、script、shell copy cron)
## command 作为 ansible 的默认模块,可以运行远程权限范围所有的 shell 命令,不支持管道符
[yx@localhost ~]$ ansible test -m command -a 'free -h'
192.168.6.220 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 1.8G 629M 201M 8.9M 1.0G 804M
Swap: 1.6G 194M 1.4G
192.168.10.227 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 7.5G 692M 6.4G 74M 488M 6.4G
Swap: 4.0G 0B 4.0G
## script 的功能是在远程主机执行主控端存储的 shell 脚本文件,前提是ansible服务端已经存在的文件或脚本
ansible test -m script -a "/tmp/test.sh"
192.168.6.220 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.6.220 closed.
",
"stderr_lines": [
"Shared connection to 192.168.6.220 closed."
],
"stdout": "",
"stdout_lines": []
}
192.168.10.227 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.10.227 closed.
",
"stderr_lines": [
"Shared connection to 192.168.10.227 closed."
],
"stdout": "",
"stdout_lines": []
}
## shell 的功能是执行远程主机上的 shell 脚本文件,支持管道符。前提是远程主机必须存在的
# 用shell模块的时候,本机上面的脚本是不会执行的,要想执行本机上面的必须用script
yx@localhost ~]$ ansible test -m shell -a "/tmp/test.sh"
192.168.10.227 | FAILED | rc=126 >>
/bin/sh: /tmp/test.sh: 权限不够non-zero return code
192.168.6.220 | CHANGED | rc=0 >>
#copy模块用于实现主控端向目标机器复制文件
#src是源目录,dest是目标目录,mode是权限
ansible 192.168.6.220 -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
# cron 模块用于配置远程主机 crontab
# name是注释的名字,minute是分钟,job是crontab的内容,其他的时间表示:分钟 minute 小时 hour 日期 day 月份 month
[yx@localhost ~]$ ansible test -m cron -a "name='check' minute='1' job='ntpdate asia.pool.ntp.org'"
192.168.10.227 | CHANGED => {
"changed": true,
"envs": [],
"jobs": [
"check"
]
}
192.168.6.220 | CHANGED => {
"changed": true,
"envs": [],
"jobs": [
"check"
]
}
#查看crontab
[yx@localhost ~]$ ansible test -m command -a "crontab -l"
192.168.6.220 | CHANGED | rc=0 >>
#Ansible: check
1 * * * * ntpdate asia.pool.ntp.org
192.168.10.227 | CHANGED | rc=0 >>
#Ansible: check
1 * * * * ntpdate asia.pool.ntp.org
###批量删除crontab 若要删除该cron 只需要加一个字段 state=absent
[yx@localhost ~]$ ansible test -m cron -a "name='check' minute='1' job='ntpdate asia.pool.ntp.org' state=absent"
192.168.10.227 | CHANGED => {
"changed": true,
"envs": [],
"jobs": []
}
192.168.6.220 | CHANGED => {
"changed": true,
"envs": [],
"jobs": []
}
4.3 get_url, yum,service,user ,setup
# get_url 模块可以实现从远程主机下载指定 URL 到本地,支持 sha256sum 文件教验。
ansible test -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
##yum用于安装软件,这个必须要root用户
ansible test -m yum -a "name=httpd state=installed" # 安装
ansible testhost -m yum -a "name=httpd state=removed" ##卸载http软件包
##service 模块可以用来管理远程主机的系统服务。 也必须要有root权限才可以
ansible 192.168.6.220 -m service -a "name=firewalld state=stopped enabled=yes" #停止
ansible 192.168.6.220 -m service -a "name=firewalld state=restarted" #重启
ansible 192.168.6.220 -m service -a "name=firewalld state=reloaded" # 重新加载
##user 模块用来进行远程主机用户的管理。
ansible Client -m user -a "name=wang comment='user wang'" # 创建用户 wang
ansible Client -m user -a "name=wang state=absent remove=yes" # 删除用户 wang
########查看主机的软硬件信息的
ansible 192.168.6.220 -m setup
ansible-doc -l 列出所有的模块
ansible-doc cron 查看指定模块的文档