Linux:ansible自动化运维工具

环境介绍

当前所有执行权限我是在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://mirrors.aliyun.com/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]

www.bdqn.cn:222 ##通过端口222管理设备

[mail]

ly01.mail.cn

[ly]

ly[2:5].test.com ##正则表达式:表示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"

删除刚刚添加的用户

相关推荐
iangyu25 分钟前
docker常用命令
运维·docker·容器
一切皆是定数44 分钟前
Linux驱动开发——LED驱动开发
linux·驱动开发·b树
小小不董1 小时前
图文深入理解Oracle DB Scheduler
linux·运维·服务器·数据库·oracle
不烦下雨c2 小时前
[网络]抓包工具介绍 tcpdump
linux·tcpdump
南瓜小米粥、2 小时前
通过fdisk初始化Linux数据盘
linux·运维·服务器
秋风起,再归来~2 小时前
【Linux庖丁解牛】—Linux基本指令(中)!
linux·指令
Eternal-Student2 小时前
预处理、编译、汇编、链接
linux·汇编·windows
sp_wxf3 小时前
Stream流
linux·服务器·windows
LYK_HAHA3 小时前
centos常用知识和命令
linux·运维·centos
PythonFun4 小时前
自建RustDesk服务器:详细步骤与操作指南
运维·服务器