也可以参考ansible 模块介绍的其他文章:https://www.cnblogs.com/guxiaobei/p/8316903.html

安装ansible

yum install epel-release -y
yum install ansible -y

ansible被安装到 /etc/ansible/

主要的配置文件

  • /etc/ansible/ansible.cfg
  • /etc/ansible/hosts

ansible 的配置文件的位置,可以随便放,但是要遵循一个查找顺序

按照以下优先级查找

1)$ANSIBLE_CONFIG 是否存在
2)当前目录中是否存在ansible.cfg
3)查看当前用户的家目录是否有.ansible.cfg

针对/etc/ansible/ansible.cfg

有如下配置可以修改

forks = 5 #该项控制ansible的并发数量,可以根据自身服务器的性能调大,例如调到30

host_key_checking = False # 该项默认前面有一个注释符号"#",通常我习惯把该项的注释去掉,第一次链接不需要检查host_key

inventory      = /etc/ansible/hosts #这个是主机清单文件的位置,可以修改到其他地方

针对/etc/ansible/hosts

该配置可以设置被控制节点的分组

如下设置了一个node组,该组有两个IP,如下设置节点控制需要设置免密登陆

[node]
192.168.1.80
192.168.1.81

用如下的设置可以不需要设置免密,只是需要把密码填写在hosts文件中ansible_ssh_pass后面连接密码

192.168.1.251   ansible_ssh_user=root ansible_ssh_pass=232410
192.168.1.252 ansible_ssh_user=root ansible_ssh_pass=232410

ansible在使用上分为

1)ad-hoc 用法 #一次性,单个执行命令的方式,如 ansible node -m ping

2)playbook 用法 #写复杂脚本的方式

常用ansible 模

ansible ping, 测试节点的连通性,是否可以连接

ansible node -m ping

ansible 在远程节点执行命令

ansible node -m raw -a "uptime"

command #执行shell命令(不支持管道等特殊字符)
shell #执行shell命令
scripts #执行shell脚本
yum_repository #配置yum仓库
yum #安装软件
copy #变更配置文件
file #建立目录或文件
service #启动或者停止服务
mount #挂载设备
cron #定时任务
firewalld #防火墙
get_url #下载软件

1)yum 安装软件模块

ansible node -m yum -a "name=bind-utils state=present"
name #指定要安装的软件包名称
state #指定使用yum的方法, present(安装软件包),absent(移除软件包),latest(如有安装,那么继续升级到最新)

2) copy模块

3)file模块
path #指定远程主机目录或文件
recurse #递归授权
state #状态
directory #在远程创建目录
touch #在远程创建文件
link #link或者hard表示创建链接文件
absent #表示删除文件或者目录
mode #设置文件或者权限
owner #设置文件或者目录属主信息
group #设置文件或者目录属组信息

4)get_url文件下载模块
#普通的下载
ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644"

#用户名密码校验
ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644 username=user password=123456"

#校验md5,或者sha256
ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644 checksum=md5:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f"

5)service, systemd 服务管理
ansible node -m service -a "name=crond state=started enabled=yes"
ansible node -m service -a "name=crond state=stopped enabled=no"
ansible node -m service -a "name=crond state=restarted"
ansible node -m service -a "name=crond state=reloaded"

name #定义要启动服务的名称
state #指定服务状态
started #启动服务
stopped #停止服务
restarted #重启服务
reloaded #重载服务
enabled #开机自启

6)group组模块

ansible node -m group -a "name=infra gid=888"
name #指定创建的组名
gid #指定组的gid
state
absent #移除远程主机的组
present #创建远端主机的组(默认)

7)user 模块添加用户
#创建用户
ansible node -m user -a "name=tom comment='A developer' uid=666 group=users shell=/bin/bash create_home=True"
#给用户添加额外的组
ansible node -m user -a "name=tom groups='wheel,root' append=yes "
#给用户创建密钥对
ansible node -m user -a "name=tom generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"
#给用户创建密码
#1.通过debug模块用以下方,生成为12345的密码,返回的msg结果就是加密后的秘密
ansible localhost -m debug -a "msg={{'12345'|password_hash('sha512','salt')}}"
localhost | SUCCESS => {
"msg": "$6$salt$WP.KbhMfqJG7dtlBltkj4Um4rVhch54R5JCi..."
}
#用上面生成的加密字符串,给用户添加密码
ansible node -m user -a 'name=tom password=$6$salt$WP.KbhMfqJG7dtlBltkj4Um4rVhch54R5JCi... create_home=yes shell=/bin/bash'

实测,以上用debug模块生成密码的方式,包含一些特殊字符的情况下,一直报错

推荐用:

ansible all -m raw -a "echo 'my_root_new_password' | passwd --stdin root" #特殊密码还是会报错

用ansible all -m script -a "./changpass.sh" script 修改密码

#删除用户
ansible node -m user -a "name=tom state=absent"

uid #指定用户的uid
group #指定用户组名称
groups #指定附加组名称
password #给用户添加密码(记得用单引号)
shell #指定用户的登录shell
create_home #是否创建家目录

8)cron 模块
#添加一个任务时间是minute,hour,day,month,weekday,如果省略就是代表*
#不同任务一定要加一个名字,
ansible node -m cron -a "name='cron01' minute=* hour=* day=* month=* weekday=* job='/bin/sh test.sh'"
ansible node -m cron -a "name='cron01' job='/bin/sh test.sh'"
#删除某个任务
ansible node -m cron -a "name='cron01' job='/bin/sh test.sh' state=absent"
#注释相应的定时任务,使任务失效
ansible node -m cron -a "name='cron01' job='/bin/sh test.sh' disabled=yes"

9) mount 模块
####
#使用ansible 在192.168.1.100上yum安装nfs-utils
#通过ansible 写入配置文件到192.168.1.100
#在192.168.1.100上运行nfs服务
#通过ansible 在192.168.1.101上挂载192.168.1.100上的共享目录

ansible 192.168.1.100 -m yum -a 'name=nfs-utils state=present'
ansible 192.168.1.100 -m copy -a 'content="/media 192.168.1.0/24(rw,sync,no_all_squash)" dest=/etc/exports'
ansible 192.168.1.100 -m systemd -a "name=nfs state=started enabled=yes"

#使用mount模块挂载,并且写入配置到/etc/fstab
ansible 192.168.1.101 -m mount -a "src=192.168.1.100:/media path=/opt fstype=nfs opts=defaults state=mounted"
#使用mount模块卸载,并且清空/etc/fstab中相应的配置
ansible 192.168.1.101 -m mount -a "src=192.168.1.100:/media path=/opt fstype=nfs opts=defaults state=absent"

state
present #开机挂载,仅将挂载配置写入/etc/fstab
mounted #挂载设备,并将配置写入/etc/fstab
unmounted #卸载设备,不会清除/etc/fstab写入的配置
absent #卸载设备,会清理/etc/fstab写入的配置

10)unarchive 模块

ansible node -m unarchive -a "src=./abc.tar.gz dest=/usr/local/ copy=yes mode=0755"

参数:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限

linux shell ansible 命令详解的更多相关文章

  1. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  2. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

  3. Linux shell join命令详解

    Linux join命令 2012-02-09 17:49:00| 分类: SHELL | 标签:linux join 文件连接 |字号 订阅join命令 功能:“将两个文件里指定栏位同样的行连接起来 ...

  4. linux shell seq命令详解

    seq: squeue  是一个序列的缩写,主要用来输出序列化的东西 seq常见命令参数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 ...

  5. Linux shell cut 命令详解

    详细资料请参考:博客园骏马金龙 https://www.cnblogs.com/f-ck-need-u/p/7521357.html cut命令将行按指定的分隔符分割成多列,它的弱点在于不好处理多个分 ...

  6. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  7. 【转帖】Linux定时任务Crontab命令详解

    Linux定时任务Crontab命令详解 https://www.cnblogs.com/intval/p/5763929.html 知道有crontab 以及 at 命令 改天仔细学习一下 讲sys ...

  8. [转帖]Linux:cut命令详解

    Linux:cut命令详解 https://www.cnblogs.com/Spiro-K/p/6361646.html cut -f cut -f -d cut -c1- 这三个命令好像最常见, 记 ...

  9. Linux定时任务Crontab命令详解_转

    转自:Linux定时任务Crontab命令详解 (部分修改) linux 定时系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服 ...

随机推荐

  1. K3标准产品的BOS单据发布至自定义模块

    在自定义模块 下先随便发布一张单据,然后后台更新数据表. select * from icclasstype where fname_chs like '付款申请单%'   --查询表单的ID upd ...

  2. [P3935] Calculating - 整除分块

    容易发现题目要求的 \(f(x)\) 就是 \(x\) 的不同因子个数 现在考虑如何求 \(\sum_{i=1}^n f(i)\),可以考虑去算每个数作为因子出现了多少次,很容易发现是 \([n/i] ...

  3. C++——指针1

    7.关于内存地址 内存空间的访问方式:通过变量名访问,通过地址访问: 地址运算符:& 如:int var; 则&var表示变量var的内存起始地址: //& 出现在声明语句中出 ...

  4. Node.js、npm和webpack的安装

    1. 前往Node.js官网下载安装程序 2. 一路点击下一步即可 3. 测试是否安装成功 4. 配置npm在安装全局模块时的路径和缓存cache的路径 因为在执行例如npm install webp ...

  5. Python读取Excel,日期列读出来是数字的处理

    Python读取Excel,里面如果是日期,直接读出来是float类型,无法直接使用. 通过判断读取表格的数据类型ctype,进一步处理. 返回的单元格内容的类型有5种: ctype: 0 empty ...

  6. 超简单的OpenGL & WebGL & Three.js介绍_1

    专业解释 什么是OpenGL OpenGL(Open Graphics Library即开放图形库或者“开放式图形库”)是用于渲染2D.3D矢量图形的跨语言.跨平台的应用程序编程接口(API). 这个 ...

  7. Linux零碎002

    1.if else就近原则: 2.指针位数与机器地址总线宽度一致: 3.数组即常量指针,用法和指针类似,在操作指针时:p与&p[0]含义一样: 4.编译器按照内存递减的方式来分配变量.

  8. 分组拼接字符串,GROUP_CONCAT

    背景 一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5 新需求来了,静悄悄的来了!!! 领导想要查看每个 ...

  9. jquery使用ajax实现实时刷新,轮询

    来自:https://blog.csdn.net/qq_25406669/article/details/78343082 var isLoaded = false; function reqs() ...

  10. Android 的UI基础布局的学习

    一. 今天学习了Android 的UI基础布局的部分,绝大多数的布局都在Androidstudio的这个界面里,如下: 在左边的框里的palette的内部,包含了的大多数的布局所要用的button按钮 ...