一. 下载安装

#下载wget
yum install -y wget

#将epel源下载到本地 wget
-O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#安装ansible yum install -y ansible

 

二. ansible 命令格式

Usage: ansible <host-pattern> [options]
-a MODULE_ARGS, #模块参数 -C, --check # 干跑,白跑 -f FORKS, --forks=FORKS #指定并发,默认5个 --list-hosts #列出主机 -m MODULE_NAME# 模块名称 --syntax-check #检查语法 -k #密码

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
rpm -ql ansible|more # 查看ansible生成的文件

所有文件如下:

/etc/ansible
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts     #  写入被控机的ip地址  ****
/etc/ansible/roles #空文件夹



 

ping走什么协议  ICMP

ansible 底层是通过ssh实现的

 

三.配置 host

  1.通过用户密码连接

  ① hosts 的简单配置

ansible --- 3. 远程控制 随笔 第1张

 

   ②连接的代码

ansible --- 3. 远程控制 随笔 第2张

 

 

   2.通过秘钥连接

  ①秘钥

ssh-keygen     生成秘钥对   (一直回车就可以,)

ssh-copy-id  root@192.168.2.132    将公钥传到 被控机

ssh root@192.168.2.132     就可直接连接 被控机

 

 

  ② hosts 的配置

ansible --- 3. 远程控制 随笔 第3张

 

   ③连接的 常用命令

ansible 192.168.226.101 -m ping #单独机器的ping
ansible
192.168.226.101,192.168.226.102 -m ping #多个机器的ping
ansible all
-m ping #全部机器
ansible web
-m ping #单个的组
ansible web,db
-m ping #多个组的并集
ansible
'web:&db' -m ping #多个组的交集
ansible
'web:!db' -m ping #多个组的差集,在前面但是不在后面

 

 

 四.模块

  0. ansible-doc  (模块信息)

ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j #以json的方式返回数据
-l, --list #列出所有的模块
-s, --snippet #以片段式显示模块信息
ansible-doc 模块名 #直接查看完整信息

ansible-doc -l |wc -l 所有模块的数量

 

片段式显示模块信息:

 ansible --- 3. 远程控制 随笔 第4张

 

完整信息:

 ansible --- 3. 远程控制 随笔 第5张

 

   1.command   模块(执行远程命令)

ansible web -m command -a "pwd" ansible web -m command -a "ls" ansible web -m command -a "chdir=/tmp pwd" #切换目录并执行命令 ansible web -m command -a "creates=/tmp pwd" #因为tmp目录存在,pwd不会执行 ansible web -m command -a "creates=/tmp2 pwd" #因为tmp2不存在,pwd执行 ansible web -m command -a "removes=/tmp2 pwd" #因为tmp2不存在pwd不执行 ansible web -m command -a "removes=/tmp pwd" #因为tmp目录存在,pwd会执行

ansible web -m command -a "useradd alex"   创建用户(查看home文件下有无此文件夹)
ansible web -m shell -a "echo '1234' |passwd --stdin alex" 
#设置用户的密码 (要用shell 模块)

 

   2.shell  模块(支持特殊字符<>|$&)

 

ansible web -m shell -a "echo '1234' |passwd --stdin alex"  设置用户的密码
ansible web -m shell -a "chdir=/tmp pwd"   #shabang  用来写解释器 
ansible 192.168.226.101 -m shell -a "bash a.sh" #执行shell脚本
ansible 192.168.226.101 -m shell -a "/root/a.sh" # 执行shell脚本,文件要有执行的权限
ansible 192.168.226.101 -m shell -a "/root/a.py" #执行Python文件

ansible --- 3. 远程控制 随笔 第6张

 

 

 两种执行文件的方式

第一种
ansible --- 3. 远程控制 随笔 第7张

 


chmod +X a.sh 给文件添加权限

执行代码:
./a.sh 直接打开文件
第二种
ansible --- 3. 远程控制 随笔 第8张

执行代码:
bash b.sh

 

   3.script  模块(执行管控机文件,作用在被控机)

ansible db -m script -a "/root/a.sh" #执行本地的文件,管控机的文件
ansible db
-m script -a "creates=/root/a.sh /root/a.sh"
# 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过
ansible db
-m script -a "creates=/tmp /root/a.sh" #判断被控机上的文件

 

   4. copy 模块(将本地文件复制到远程)

 

backup #创建一个备份文件,以时间戳结尾
content #直接往文件里面写内容(覆盖)
dest #目标地址
group #属组
mode# 文件的权限 W 2 R 4 X 1
owner #属主
src #源地址
ansible web
-m copy -a "src=/etc/fstab dest=/tmp/f"
#复制本地文件到远程主机,并修改文件名,多次执行不会改变,因为checksum值是一样的
ansible web
-m copy -a "src=a.sh dest=/tmp/a.sh backup=yes"
#复制本地文件,并备份
ansible web
-m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=alex mode=755"
# 复制本地文件到远程主机,并指定属组和权限
ansible web
-m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755"
#复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变更
ansible web
-m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755"
#复制本地目录下的所有文件,
ansible web
-m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b"
#直接往文件里面写内容, 若再次写就是覆盖写,慎用

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄