Ansible模块
# 环境
# ansible: 172.16.1.61
cat /etc/ansible/hosts
[web]
web1: 172.16.1.7
web2: 172.16.1.8
web3: 172.16.1.9
1. ssh免密钥配置
# 免交互创建密钥
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
# 免交互将密钥推送至远端
sshpass -p'1289456' ssh-copy-id -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.108
# scp免交互拷贝远程拷贝
sshpass -p "1289456" scp root@172.16.1.61:/root/1.txt /tmp
# 通过ansible使用scp免交互远程拷贝
ansible web -m shell -a " sshpass -p "1289456" scp root@172.16.1.61:/root/1.txt /tmp "
2. Ad-Hoc
# ad-hoc 表示临时命令,不会保存
# ansible中有两种模式,分别是ad-hoc模式和playbook模式
#使用场景
# 在多台机器上,查看某个进程是否启动
# 在多台机器上,拷贝指定日志文件到本地
3. Ad-Hoc命令格式
命令 + 主机组名称 + 指定模块 + 模块动作 + 具体命令
4. command命令模块( shell )
# command 为默认模块,可以不指定;
ansible web -a "hostname"
# 特殊操作可以使用shell模块,同样是命令模块
ansible web -m shell -a "ifconfig |grep eth0 " -f 50
# -f = forks /etc/ansible/ansible.cfg #结果返回的数量
5. script脚本模块
ansible web -m script -a "/scripts/check_flog.sh"
6. yum 安装软件模块
# name 指定要安装的软件包名称;
# state 指定使用yum的方法; (installed,persent #安装) (removed,absent #移除软件包) (latest #安装最新)
# exclude 排除
# enablerepo 指定yum仓库
# disablerepo 安装时不使用哪个仓库
ansible web -m yum -a "name=nginx state=installed"
ansible web -m yum -a "name=nginx state=latest"
ansible web -m yum -a "name=nginx enablerepo=epel state=present"
ansible web -m yum -a "name=http://192.168.16.236/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present "
ansible web -m yum -a "name='*' state=latest exclude="kernel*""
ansible web -m yum -a "name=nginx state=abent"
7. copy 拷贝模块
`# src 源文件
`# dest 目标路径
`# backup 对推送过去的文件,进行备份
`# content 直接批量的在被管理端的文件中添加内容
`# group 指定属组
`# owner 指定属主
`# mode 指定权限
ansible web -m copy -a 'src=/etc/yum.repos.d/nginx.repo dest=/tmp/owner=root group=root mode=600 backup=yes'
ansible web -m copy -a "src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 backup=yes"
# 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
ansible web -m copy -a "content='test' dest=/tmp/dtest.txt"
8.systemd 启动服务模块
`# name 服务名称
`# state 操作 ( started stopped restarted reloaded )
`# enabled 是否开机自启动 yes|no
ansible web -m systemd -a "name=nginx state=started"
ansible web -m systemd -a "name=nginx state=started enabled=yes"
9.file 文件配置模块
`# path 指定远程主机目录或文件信息
`# recures 递归授权
`# state 类型或动作 -->
`# --> directory 创建目录
`# --> touch 创建文件
`# --> link 创建链接文件
`# --> absent 删除文件或目录
`# --> mode 指定权限
`# --> owner 指定属主
`# --> group 指定属组
ansible web -m file -a "path=/tmp/test state=directory"
ansible web -m file -a "path=/tmp/test state=touch mode=555 owner=root group=root"
ansible web -m file -a "src=/tmp/test path=/tmp/test_link state=link"
10. group模块
`# name 指定创建的组名
`# gid 指定组的gid
`# state 状态 -->
`# --> absent 移除远端主机的组
`# --> present 创建远端主机的组
ansible web -m group -a " name=www gid=666 state=present"
ansible web -m group -a " name=www state=absent"
11. user模块
`# name 指定创建的用户名
`# uid 指定用户uid
`# group 指定用户组名称
`# groups 指定附加组名称
`# password 给用户添加密码
`# shell 指定用户登录shell
`# createhome 是否创建家目录
`# system 指定系统用户
ansible web -m user -a "name=www uid=666 shell=/sbin/nologin create_home=no"
`# 将明文密码进行hash加密,然后进行用户创建
ansilbe all -i localhost, -m debug -a "msg={{'password' | password_hash('sha512', 'mysecretsalt' ) }}" ;
"msg": "$6$mysecretsalt$ZB9R8AirQYAXhtfhOo2qdJz52FyNI6v3L6Uc3KNRP.arBKIYpcuEyQewT5qBAHoyQFwHkW6Z551Ql.cZ53GeY0"
ansible web -m user -a 'name=mysql password="$6$mysecretsalt$ZB9R8AirQYAXhtfhOo2qdJz52FyNI6v3L6Uc3KNRP.arBKIYpcuEyQewT5qBAHoyQFwHkW6Z551Ql.cZ53GeY0"'
12. mount 挂载
`# src 源设备( 磁盘|光盘|远程共享地址 )
`# path 挂载点
`# fstype 设备类型 --> nfs xfs ext4 iso9660
`# opts 挂载选项 defaults
`# stste 状态 -->
`# --> absent | mounted 永久挂载
`# --> present | unmounted 临时挂载
ansible web -m mount -a "src=172.16.1.31:/data/blog path=/opt fstype=nfs opts=defaults state=mounted"
ansible web -m mount -a "src=172.16.1.31:/data/blog path=/opt fstype=nfs opts=defaults state=unmounted"
13. selinux
`# 关闭selinux
ansible web -m selinux -a "state=disabled"
14. firewalld
`# zone 指定区域 默认public
`# service 指定服务名称
`# port 指定端口
`# state 启用或禁止
`# masquerade 开机地址伪装是否开启 yes|no
`# immediate 临时生效 yes | no
`# permanent 永久生效
`# source 来源IP
`# rich_rule: rule service name="ftp" audit limit value="1/m" accept
ansible web -m firewalld -a "zone=public service=http state=enabled immediate=yes permanent=yes"
ansible web -m firewalld -a "zone=public port=80/tcp state=enabled immediate=yes permanent=yes"
`# 将5555端口转发到 172.16.1.7 22 端口 开启masquerade地址伪装`
ansible web -m firewalld -a "zone=public rich_rule='rule family=ipv4 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.7' state=enabled immediate=yes"
ansible web -m firewalld -a "zone=public masquerade=yes state=enabled immediate=yes"
`# 配置基于来源IP 10.0.0.1主机 放行 22 端口`
ansible web -m firewalld -a "zone=public rich_rule='rule family=ipv4 source address=10.0.0.100/32 service name=ssh accept' state=enabled immediate=yes"
15. cron 定时任务模块
`# 添加一个定时任务
ansible web -m cron -a "name='Backup scripts' minute=00 hour=05 user=root job='/bin/bash /scripts/check_data.sh &>/dev/null'"
`# 删除定时任务
ansible web -m cron -a "name='Backup scripts' minute=00 hour=05 user=root job='/bin/bash /scripts/check_data.sh &>/dev/null' state=absent"
16.yum_repository 源仓库模块
`# name 仓库名称,文件的名称
`# description 描述
`# baseurl 仓库地址
`# enabled 是否启用该仓库yes
`# gpgcheck 不对下载的包检查
ansible web -m yum_repository -a 'name=rpmforge description="RPMforge YUM Repo" baseurl="https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/" enabled=yes gpgcheck=no'
17.replace 替换模块
# path 指定替换文件路径
# regexp 指定替换对象
# repaace 指定替换内容
- name: Modify ssh configure
replace:
path: /etc/ssh/sshd_config
regexp: '^#UseDNS yes'
replace: 'UseDNS no'