环境介绍
当前所有执行权限我是在root下执行的,如果提示权限之类的,可以在每句命令前 加上 sudo
ansible主服务器 192.168.0.194
另外两个客户端分别为 192.168.0.193 192.168.0.192
软件只需要在主服务器上安装,客户端不需要去安装软件,因为他们相互使用的是ssh
只需要在主服务器上安装好软件,然后生成一个密钥发送至客户端,实现,主服务器免密ssh连接客户机即可
安装ansible
在主服务器上进行软件安装
rm -rf /etc/yum.repos.d/*
删除所有yum仓库(如果你原来有重要yum仓库记得备份)
wget -O /etc/yum.repos.d/CentOS-Base.repo http:///repo/Centos-7.repo
安装阿里云yum仓库镜像
yum clean all && yum makecache
清除以前缓存 &&更 新缓存
yum -y install epel-release
yum -y install ansible
主服务器生成密钥ssh免密登录客户机
在主服务器上
ssh-keygen -t rsa
输入完命令一直回车即可
ssh-copy-id 用户@ip地址
传输密钥,传输完以后可以进行免密ssh连接
ssh-copy-id root@192.168.0.193
输入完命令以后,yes,输入密码就可以了
如果有另外的客户端,也执行同样操作,全测试可以免密ssh登录即可
ssh-copy-id root@192.168.0.192
只要ssh登录时候不用密码就是成功了
主机列表 /etc/ansible/hosts
主机列表可以写一个组,组名下面写ip或者主机名,就是这个组的成员,控制这个组,或控制单个都是可以的
vim /etc/ansible/hosts
进去以后可以单起一行,前面没有的#才行
格式为
[组名]
主机ip或主机名
……
web就是组名
下面的就是ip,当我们对web进行操作,两个主机就会回馈
此外还可以这样写……
[web] ## 主机组
192.168.10.2
192.168.10.3
[test01]
:222 ##通过端口222管理设备
[mail]
[ly]
ly[2:5]. ##正则表达式:表示4台主机ly2,ly3,ly4,ly5..
基础操作
ansible web -m command -a "firewall-cmd --state"
查看web组的主机有没有开防火墙
ansible web -m command -a "systemctl stop firewalld" --limit "192.168.0.193"
对web组的192.168.0.193执行关闭防火墙操作
可以指定ip去执行
ansible 192.168.0.192 -m command -a "ip a"
通过通配符来指定多个主机远程操作(可以理解为一个网段)
ansible 192.168.0.* -m command -a "firewall-cmd --state"
Ansible注意事项->提示颜色信息说明
黄色:对远程节点进行相应修改
绿色:对远程节点不进行相应修改,或者只是对远程节点信息进行查看
红色:操作执行命令有异常
紫色:表示对命令执行发出警告信息(可能存在的问题,给你一下建议)
ansible命令
检查清单中所有主机是否存活
-f 并发线程数为5
-m 调用ping模块(并不是ping命令)
ansible all -f 5 -m ping
## success---表示成功; => {} 表示返回结果
## changed false 表示没有对主机进行更改
##pong ---ping模块返回结果
all就是全部的意思,也可以指定某个组或者ip
列出web组主机列表
ansible web --list
批量显示web组磁盘使用情况
ansible web -m command -a "df -hT"
ansible-doc 可用来查询模块文档的说明,类似于man
列出所有模块信息
ansible-doc -l
查询ping模块的说明信息
ansible-doc ping
ansible-console 交互式工具。类似于cmd或shell
ansible-console
进去之后可以使用cd + 组名进去进行直接操作
list可以列出当前组的成员
ansible常用模块
Shell功能全面但是执行率低
command不支持:逻辑运算符、条件判断符号、重定向命令或者是管道命令
command模块---远程执行命令
chdir---在远程主机运行命令前,要提前进入的目录
creates---创建文件(如文件已存在,则不执行)
removes--移除文件(如文件不存在,则不执行)
executable--更改shell环境(并且执行命令时要使用绝对路径)
在web组主机上运行命令,运行前切换到/root目录
ansible web -m command -a "chdir=/root ls ./"
web就是组名
shell模块---相当于调用远程主机的shell进程,在该shell下打开一个子shell运行命令
ansible web -m shell -a 'echo "hello ly" >> /tmp/hello.txt'
web就是组名
ssh ip地址 cat /tmp/hello.txt
copy模块---在远程主机执行复制操作文件。
– src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
– content:用于替代”src”,可以直接设定指定文件的值
– dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
– directory_mode:递归的设定目录的权限,默认为系统默认权限
– force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
– others:所有的file模块里的选项都可以在这里使用mode--文件权限
owner--属主
group--属组
ansible web -m copy -a "src=/etc/hosts dest=/tmp/ mode=777 owner=nobody group=root"
更改远程主机名为ly
ansible ip地址或组名 -m hostname -a "name=ly"
yum模块---调用远程主机的yum程序进行管理
Ansible yum模块主要用于软件的安装、升级、卸载,支持rpm软件包的管理
yum模块使用详解:conf_file:设置远程yum执行时所依赖的yum配置文件
disable_gpg_check:安装软件包之前是否检查gpg key
name:需要安装的软件名称,支持软件组安装
update_cache:安装软件之前更新缓存
enablerepo:指定repo源名称
skip_broken:跳过异常软件节点
state:软件包状态,包括installed、present、latest、absent、removed present, installed是指安裝套件,而latest指安裝最新的套件,也就是使用 yum mirror 上最新的版本。
absent, removed 没有什么区别
调用yum模块安装httpd服务
ansible ip地址 -m yum -a "name=httpd state=present"
service模块---管理远程主机服务
name---服务名
state=started/stopped/restarted 动作为启动、停止、重启
enabled=no/yes 是否设置为开机启动
runlevel :如果定义了开机启动,则设置运行级别
确保要开启的服务软件已经安装了
ansible 192.168.10.3 -m service -a "name=httpd state=started enabled=yes"
执行完就这样
running就开启成功了
user模块---管理远程主机用户账户
Ansible user模块主要用于操作系统用户、组、权限、密码等操作
user模块使用详解:system:默认创建为普通用户,为yes则创建系统用户
append:添加一个新的组
comment:添加描述信息
createhome:给用户创建家目录
force:强制删除用户
group:创建用户主组
groups:将用户加入组或者附属组添加
home:指定用户的家目录
move_home=yes/no 如果设置的家目录已存在,是否将已存在的家目录进行移动
name:表示状态,是否create、remove、modify
password:指定用户的密码,为加密密码
remove:删除用户
shell:设置用户的shell登录环境
uid:设置用户ID
update_password:修改用户密码
state:用户状态,默认为present,表示新建用户
ansible web -m user -a 'name=user1 system=yes uid=501 group=root groups=sshd shell=/sbin/nologin home=/user1 password=123 comment="test user"
在web组的所有主机上创建一个user1用户,是系统用户,uid是501 组是root 附属组是sshd ,shell环境是/sbin/nologin ,家目录是/user1,密码是123,介绍是test user
ansible web -m user -a 'name=user1 password=123'
如果你就简单的设置一下那么他和useradd user1差不多,
ansible web -m user -a "name=user1 remove=yes state=absent"
删除刚刚添加的用户