Bash
ansible
服务端生成key
ssh-keygen
给客户端分发key
ssh-copy-id root@192.168.16.203
ssh-copy-id root@10.0.0.200
安装ansible需要配置epel的源可以用阿里云的epel的源
安装ansible
yum install ansible -y
配置文件
vim /etc/ansible/ansible.cfg
[defaults] 默认配置段
inventory = /etc/ansible/hosts IP列表默认配置文件存放位置
library = /usr/share/my_modules/
module_utils = /usr/share/my_module_utils/ 模块存放位置,需要第三放模块可以放在这目录里
remote_tmp = ~/.ansible/tmp 远程执行命令的临时目录
local_tmp = ~/.ansible/tmp
plugin_filters_cfg = /etc/ansible/plugin_filters.yml 插件配置文件
forks = 5 指定服务器并发连接数
poll_interval = 15 轮训间隔时间默认为15秒,轮训检测客户端结果
sudo_user = root 用户默认是root 不需要提权
ask_sudo_pass = True 密码
ask_pass = True
transport = smart 表示传输端口或方式
remote_port = 22 端口
module_lang = C 模块开发的语言 C语言
module_set_locale = False 设置模块字符集,默认即可
#gathering = implicit 和客户端通信,采集客户端facts信息,客户端IP 主机名等
基于密码验证
vim /etc/ansible/hosts
[web-servers]
10.0.0.201 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_password=123456
192.168.16.203 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_password=123456
输入密码执行操作,然后输入密码
ansible -i /etc/ansible/hosts nginx -m ping
不推荐用for循环
利用for循环查看ssh执行
for i in `seq 1 200`;do echo -e "\033[32m10.0.0.$i | CHANGED | rc=0 >>\033[0m";ssh -l root 10.0.0.$i "df -h";done
利用ansible for执行
for i in `seq 1 200`;do echo -e "\033[32m10.0.0.$i command:\033[0m";ssh -l root 10.0.0.$i "df -h";done
ansible制定配置文件,执行相关命令可以用-i自定文件
absible -i /etc/ansible/bjserver -m command -a "df -h" >> /root/123.txt
[web-servers] 组
10.0.0.201 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
主机IP 端口 用户名和密码
192.168.16.203 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
主机IP 端口 用户名和密码
ping客户端
第一种
ansible -i /etc/ansible/hosts web-servers -m ping
第二种这个要把配置文件写在/etc/ansible/hosts里面才可以
ansible web-servers -m ping
-a
制定脚本路径或者命令的写法
-m
指定模块
slble-galaxy install
下载网络上的资源下载到本地执行安装
command
可以调用系统的命令,常见的命令都可以使用,这个命令的执行不是通过shll执行的,像"<,>","|"and "&"操作都不可以,也不支持管道,缺点不支持管道,没法批量执行命令
shell
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用
script
脚本模块执行制定的脚本可以用这个模块
copy
实现主控端向目标主机拷贝文件,类似scp功能,
file
设置文件属性
stat
获取远程文件详细属性
get_url
实现远程主机下载指定url到本地,支持sha256sum文件校验
yum
安装软件包
cron
定时任务相当于定时任务crontab -e和这个命令是一样的
command
可以调用系统的命令,常见的命令都可以使用,这个命令的执行不是通过shll执行的,像"<,>","|"and "&"操作都不可以,也不支持管道,缺点不支持管道,没法批量执行命令
command例:
查看这个web-servers这个组主机的运行时间
ansible web-servers -m command -a "uptime"
返回结果:
10.0.0.201 | CHANGED | rc=0 >>
05:03:58 up 1:52, 2 users, load average: 0.08, 0.03, 0.05
开机时间 2个用户 负载
192.168.16.203 | CHANGED | rc=0 >>
05:03:58 up 1:24, 2 users, load average: 0.00, 0.01, 0.05
查看系统内核
ansible web-servers -m command -a "uname -r"
批量创建用户
ansible web-servers -m command -a "useradd dj"
查看一个文件里面有没有dj的内容
ansible web-servers -m command -a "grep dj /etc/passwd"
返回结果:
10.0.0.201 | CHANGED | rc=0 >>
dj:x:1000:1000::/home/dj:/bin/bash
192.168.16.203 | CHANGED | rc=0 >>
dj:x:1000:1000::/home/dj:/bin/bash
让一条命令的结果输出到/tmp/123.txt下
ansible web-server -m command -a "df -h" >> /tmp/123.txt
shell
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用
shell例:
查看swap分区有没有占用利管道|和grep
ansible -i /etc/ansible/hosts web-servers -m shell -a "free -m | grep Swap"
返回结果:
10.0.0.201 | CHANGED | rc=0 >>
Swap: 2047 0 2047
192.168.16.203 | CHANGED | rc=0 >>
Swap: 2047 0 2047
注:但是我们自己定义在~/.bashrc或~/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;对shell模块的使用可以分成两块
如果待执行的语句少,可以直接写在一句话中:
ansible -i /etc/ansible/hosts web-servers -m shell -a "source ~/.bash_profile && df -h | grep sda3"
2) 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;
3、scripts模块
使用scripts模块可以在本地写一个脚本,在远程服务器上执行:
vim /etc/ansible/net.sh
#!/bin/bash
date
hostname
script
脚本模块执行制定的脚本可以用这个模块
script例:
ansible web-servers -m script -a "/etc/ansible/net.sh"
copy
实现主控端向目标主机拷贝文件,类似scp功能
copy例
1把ansible主机上的hosts文件复制到主机组中机器的/tmp/目录下
ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/etc/hosts dest=/tmp owner=root group=root mode=0755"
解释:
src
原目录
dest
目标目录
owner
属主权限
group
属组的权限
mode
权限
修改文件权限
例
ansible web-servers -m file -a "path=/tmp/hosts mode=0777"
file
文件类型
path
文件路径
backup
备份
备份文件
ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/etc/hosts dest=/tmp backup=yes"
content
创建新的文件
ansible -i /etc/ansible/hosts web-servers -m copy -a "content='oldboy123' dest=/backup/rsync.password"
stat
获取远程文件详细属性
stat
例:
获取远程文件详细属性
ansible web-servers -m stat -a /tmp/hosts
get_url
实现远程主机下载指定url到本地,支持sha256sum文件校验
get_url
ansible web-servers -m get_url -a "url=http://192.168.16.235/centos7.repo dest=/root/ mode=0775 force=yes"
解释:
url=
后面跟上要下载的连接地址
dest=
目标也就是下载要下载到那个目录里面
mode=
需要给文件的指定文件权限
force=yes
当下载文件时,如果所下的内容和原目录下的文件内容不一样,则替换原文件,如果一样,就不下载了,通过MD5值判断
如果为“否”,则仅在目标不存在时才下载文件。 一般来说,只有小型本地文件才应该为“是”。 在0.6之前,该模块表现为默认为“是”。
用yum安装httpd的rpm包
yum
例
ansible web-servers -m yum -a "name=httpd state=latest"
state参数:用于指定软件包的状态 ,默认值为present,表示确保软件包已经安装; 其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
cron
定时任务相当于定时任务crontab -e和这个命令是一样的
例子
每30分钟执行一次ls /tmp/
ansible web-servers -m cron -a "name='list dir' minute='*/30' job='/usr/bin/ls /tmp'"
批量删除定时任务
ansible web-servers -m cron -a "name='list dir' minute='*/30' job='/usr/bin/ls /tmp' state=absent"
absent
缺席
临时关闭定时任务
ansible web-servers -m cron -a "name='list dir' minute='*/30' job='/usr/bin/ls /tmp' disabled=yes"
从一台服务器复制文件到本地,并把相关配置文件放在远程主机的IP地址的目录
ansible 10.0.0.41 -m fetch -a "src=/etc/redis.conf dest=./"