andible的安装及相关的模块
ansible 作用:批量在远程机上执行命令
ansible
1.安装epel
yum install -y wget #安装wget wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #下载epel源文件
2、安装ansible
yum install ansible -y #安装ansible的命令
andible命令格式
Usage: ansible <host-pattern> [options] -a MODULE_ARGS, --args=MODULE_ARGS # 模块的参数 -C, --check # 会去执行,但是不做任何的改变,干跑,白跑 -f FORKS, --forks=FORKS # 指定进程数,做并发 --list-hosts #列出主机 -m MODULE_NAME # 模块名称 --syntax-check #检查语法 -k, --ask-pass ask for connection password #指定密码
查看ansible生成的配置文件
rpm -ql ansible #查看配置文件的命令 /etc/ansible /etc/ansible/ansible.cfg /etc/ansible/hosts /etc/ansible/roles 10.0.0.132 10.0.0.133 10.0.0.134
ssh认证方式
1.密码
2.秘钥
ssh-keygen # 生成秘钥 ssh-copy-id root@10.0.0.132 # 将秘钥文件复制到远程主机
ping
ping走的是icmp协议
ansible的命令简单使用
ansible 192.168.135.128 -m ping ansible 192.168.135.130 -m ping ansible 192.168.135.131 -m ping ansible all -m ping # 所有机器,hosts文件里面 ansible 192.168.135.128,192.168.135.131 -m ping # 部分机器 ## 分组信息
[web]
192.168.135.[130:131]
[db]
192.168.135.130
192.168.135.128
[cache]
192.168.135.128
## www[001:006].example.com 从www001到www006 ansible web --list-hosts # 用来获取符合条件的主机 ansible web -m ping # 探测组内的机器 ansible web,db -m ping # 获取db和web的并集 ansible 'web:&db' -m ping # 获取db和web的交集 ansible 'web:!db' -m ping # 获取db和web的差集,在web中但是不在db中的 ansible 'web:db' -m ping # 获取db和web的并集
弱口令的校验
其实就是用简单的密码进行验证
密码要符合的规则
- 必须有大写字母,小写字母,数字,特殊字符 - 密码必须12位以上 - 密码需要三个一换
host-pattern的格式
- 单个的主机 - 单个组 - 多个组 1.交集 组之间用:&这种符号 2.并集 组之间用冒号或者逗号 3.差集 组之间用:! - 所有的机器 all - 多个主机
获取模块帮助信息
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin] -j, --json #以json的方式返回所有模块的信息 -l # 列出所有的模块 -s, --snippet # 以片段式显示模块的帮助信息 # 不加-s显示全部信息 ansible-doc -l |wc -l #统计ansible的模块
command执行远程主机上的命令,不支持特殊字符,<,>,|,$,&
chdir #切换目录 creates # 如果存在,就不执行,如果不存在,就执行 removes # 如果不存在,就不执行,如果存在,就执行 ansible web -m command -a "pwd" ansible web -m command -a "ls /tmp" ansible web -m command -a "chdir=/tmp pwd" # 切换目录,一般做编译安装 ansible web -m command -a "creates=/tmp pwd" # 不被执行,因为/tmp已经存在, ansible web -m command -a "creates=/tmp2 pwd" # 被执行,因为/tmp2目录不存在 ansible web -m command -a "creates=/tmp2 mkdir /data" # 会被执行,因为/tmp2目录不存在 ansible web -m command -a "removes=/tmp2 pwd" # 不被执行,因为/tmp2目录不存在 ansible web -m command -a "removes=/tmp pwd" # 会被执行,因为/tmp已经存在,
补充:
#查看用户创建成功与否 第一种方法: ll /home 第二种方法: tail -l /etc/passwd 第三种方法: tail /etc/shadow 第四种方法: id 用户名 echo "alex3714" |passwd --stdin alex # 给用户设置密码,不需要二次确认 #关于单引号和双引号的区别 [root@localhost ~]# name=alex [root@localhost ~]# echo "$name" alex [root@localhost ~]# echo '$name' $name shabang
shell执行远程主机上的命令或者脚本
ansible web -m shell -a "echo 'alex'|passwd --stdin alex" # 给用户设置密码 ansible 10.0.0.132 -m shell -a "bash a.sh" # 执行shell脚本 ansible 10.0.0.132 -m shell -a "./a.sh" ansible 10.0.0.132 -m shell -a "/root/a.sh" ansible 10.0.0.132 -m shell -a "/root/a.py" # 执行python脚本 ansible 10.0.0.132 -m shell -a "python a.py" # shell 脚本 #!/bin/bash mkdir /alex2sb11 # python脚本 #!/bin/env python #coding:utf-8 print "停车坐爱枫林晚,霜叶红于二月花"
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 "removes=/root/a.sh /root/a.sh" # 判断的主机是否存在,如果存在,就执行,如果不存在,就不执行
copy将本地的文件复制远程主机上
backup # 创建备份文件,以时间戳结尾 content # 直接写内容 dest # 目标地址 group #文件的属组 mode # 文件的权限 R:4 W:2 X:1 owner #文件的属主 src # 原文件 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh" # 复制文件 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755" # 复制文件,并修改文件的权限 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex" #复制文件,修改文件的权限,属主,根据md5值来判断 ansible db -m copy -a "src=/etc/init.d dest=/tmp/" # 复制文件夹 ansible db -m copy -a "src=/etc/init.d/ dest=/tmp/" # 复制文件夹下面的所有文件 ansible db -m copy -a "src=/etc/init.d dest=/tmp/ owner=alex " # 复制文件夹,并改变文件夹的属性,文件夹的文件的属性也会跟着改变 ansible db -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语' dest=/tmp/a.sh" # 直接写文字,覆盖写入,要慎用 ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex backup=yes" #备份文件,如果远程机器上没有要备份的文件,即使指定了backup=yes 也不会去备份文件
file在远程主机上创建文件夹,文件,软连接,硬链接
access_time # 访问时间 group # 属组 mode #权限 owner #属主 path #路径 src # 原文件,link和hard的时候使用 state: directory #文件夹 file #如果不存在将不创建 废话 touch #空文件 link #软连接 hard #硬链接 absent #删除 ansible db -m file -a "path=/tmp/baoyuan state=directory" # 创建一个目录 ansible db -m file -a "path=/tmp/baoyuan state=directory owner=alex mode=644" # 创建一个目录,并制定属主,权限 ansible db -m file -a "path=/tmp/baoyuan.txt state=touch owner=alex mode=644" # 创建一个文件,并制定属主,权限 ansible db -m file -a "path=/tmp/f src=/etc/fstab state=link" # 创建一个软连接 ansible db -m file -a "path=/tmp/f state=absent" # 删除
补充:
1.软连接 就相当于windows的快捷方式 命令格式: ln -s 源文件 目标文件 特点: 源文件改变,目标文件也改变,可以跨越分区,源文件删除,连接失效 2.硬链接: 指向同一个硬盘的地址 命令格式:ln 源文件 目标文件 源文件改变 特点:目标文件也改变 ,不可以跨域分区 源文件删除,不会受影响
区别:硬链接比软连接的效率高一点
关于linux分区查看
fdisk -l #查看linux的分区
关于linux的挂载信息的查看
查看的指令 cat /etc/fstab
关于每一个ansible中的模块中关键字的含义
command执行命令 不支持特殊字符 $ < > | ; &
chair 切换命令目录,一般是编译安装 creates判断是否存在,如果存在,就不执行,如果不存在,就执行 removes判断是否存在,如果存在,就执行,如果不存在,就不执行
shell 执行远程机器上的shell脚本或者python脚本
- chdir 切换目录,一般是编译安装 - creates 判断是否存在,如果存在,就不执行,如果不存在,就执行 - removes 判断是否存在,如果存在,就执行,如果不存在,就不执行
script 执行本地脚本,执行管控机上的脚本
- chdir 切换目录,一般是编译安装 - creates 判断远程主机是否存在,如果存在,就不执行,如果不存在,就执行 - removes 判断远程主机是否存在,如果存在,就执行,如果不存在,就不执行
copy 将本地的文件复制到远程主机上
- src 原文件 - dest 目标文件 - owner 属主 - group 属组 - mode 权限 - backup 备份 - content 直接写内容,覆盖写
file 在远程主机上创建文件,文件夹,软连接,硬链接
- path #目录 - src #源文件 - link #软连接 - hard #硬链接 - owner #属主 - group #属组 - mode #权限 - state #状态 - directory 文件夹 - touch 文件 - link 软连接 - hard 硬链接 - absent 删除 - file