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=./"