概念 | Ansible是基于python开发,集合了很多优秀运维工具的有点,实现了批量运行命令,部署程序,配置系统等功能的自动化运维管理工具。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端软件,从而使得自动化环境部署变得更加简单。同时可以支持多台主机并行管理,使得管理主机更加敏捷。Ansible是基于模块完成各种任务的。 | ||||||||||||
Ansible服务安装和部署 | |||||||||||||
环境 | 使用centos7系统,创建三台虚拟机,名称分别为Ansible,Web01和Web02
| ||||||||||||
准备 | 在Ansible主机上进行下列操作: //安装依赖包 [root@Ansible ~]# yum -y install ansible //安装ansible 在centos7上,自带云yum,不需要像centos6那样去麻烦的更改yum仓库的配置。只要有外网,就可以安装ansible。 | ||||||||||||
Root 的远程 登录 | [root@centos ~]# ssh-keygen //创建密钥对,一直回车即可 [root@centos ~]# cd .ssh/ //进入ssh目录,此目录为隐藏目录 [root@centos .ssh]# cat id_rsa.pub > authorized_keys //将公钥导入到authorized_keys中 [root@centos .ssh]# chmod 600 authorized_keys //更改文件权限 [root@centos .ssh]# cp id_rsa id_rsa_root //复制一份私钥,更改名称 [root@centos .ssh]# sz id_rsa_root //将复制的私钥导入到桌面上 更改密钥名称为111 新建一个shell连接 单机用户身份认证,选择方法为:公钥 选中创建的会话,单机连接即可。 | ||||||||||||
普通用户的远程 登录 | [root@centos ~]# useradd xiaofa //创建小法用户 [root@centos ~]# passwd xiaofa //为账户设置密码 [root@centos ~]# cd /home/xiaofa //进入创建用户的家目录 [root@centos xiaofa]# cp ~/.ssh/authorized_keys . //将公钥认证拷贝到当前目录下 [root@centos xiaofa]# chown xiaofa.xiaofa authorized_keys //更改文件的属主和属组为所创建的用户 [root@centos xiaofa]# su – xiaofa //切换到xiaofa用户 [xiaofa@centos ~]$ mkdir -p .ssh //创建.ssh目录 [xiaofa@centos ~]$ mv authorized_keys .ssh/ //将公钥移动到.ssh目录中 [xiaofa@centos ~]$ chmod 700 .ssh/ //赋予.ssh目录700权限 新建一个shell标签 此时的用户登录是没有权限的,什么都做不了 [root@centos ~]# visudo //进入用户权限编辑,添加创建的用户,并使其免密码登录 关闭即生效 | ||||||||||||
[root@Ansible ~]# vim /etc/ssh/sshd_config //进入主配置文件进行修改参数 17:在工作中,1000以下的端口都是固定的,一般不能随便修改。 38:是否允许超级用户远程登录 47:密钥文件位置 65:是否开启密码认证 [root@centos ssh]# systemctl restart sshd //重启服务,应用配置 [root@centos ssh]# ss -antup | grep sshd //查看端口是否应用 将上面创建的两个登录shell的端口都改成22221,这样,当我们断开这个shell后,是不能进行登录的,因为在配置文件中仅用了root密码登录。这样我们就可以使用创建的用户登录,或者公钥登录。 | |||||||||||||
Sudo审计日志 | [root@centos ~]# echo "local2.debug /var/log/sudo.log" >> /etc/rsyslog.conf [root@centos ~]# echo "Defaults logfile=/var/log/sudo.log" >> /etc/sudoers [root@centos ~]# systemctl restart rsyslog | ||||||||||||
Ansible连接方式: 密码密钥 | 密钥: [root@centos ~]# ssh 192.168.200.137 //使用ssh远程登录到137,输入yes,输入137的密码 [root@centos ~]# exit //退出,让Ansible有一个登录记录文件 [root@centos .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.200.137 //将公钥发给137 [root@centos .ssh]# vim /etc/ansible/hosts //进入ansible的配置文件,在最后一行插入 当操作第一个模块是操作这两台,每操作一个模块,就执行里面的指定主机 模块名后续会使用分发范围定义 [root@centos .ssh]# ansible LNMP -m ping //测试LNMP模块连通情况 绿色为正常,红色为不通 因为Web02还没有连过,没有输入yes的过程,所以即便密码正确,也不能成功。也就是因为known_hosts中没有记录。 当我们使用ssh连接成功后 | ||||||||||||
Ansible常用模块 | |||||||||||||
Ping 模块 | [root@ Ansible .ssh]# ansible Web01 -m ping //测试单主机 [root@ Ansible .ssh]# ansible nginx -m ping //测试主机组 [root@ Ansible .ssh]# ansible all -m ping //测试所有被管理主机 | ||||||||||||
Command 模块 | 能够在远程服务器上执行对应命令,将命令结果返回到屏幕上,但是有 些特殊符号不支持,如:管道,重定向等 [root@ Ansible .ssh]# ansible Web01 -m command -a 'uptime' //返回Web01(模块名)的uptime值 [root@ Ansible .ssh]# ansible Web01 -m command -a 'ls /root' //查看root目录下的内容 | ||||||||||||
Shell 模块 | Shell模块的出现直接代替了command,他不但支持所有命令,还支持管道符等特殊符号。 [root@ Ansible ~]# ansible Web01 -m shell -a 'echo www | grep w' //屏幕输出www,过滤w [root@Ansible ~]# ansible Web01 -m shell -a 'echo www >> /root/aaa' //屏幕输出www追加输出重定向到/root/aaa中 [root@ansible ~]# ansible Web01 -m shell -a 'echo 123123 | passwd --stdin yunjisuan' //更改密码 | ||||||||||||
Cron 模块 | crontab时间周期:minute:分钟、hour:小时、day:日期、month:月份、 weekday:周期 crontab任务:job:指明运行的命令是什么 crontab描述:name:定时任务描述 state:present:添加、absent:移除 crontab用户身份:user:指定定时任务用哪个身份执行 [root@Ansible ~]# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"' //每分钟输出十次hello,使用test,cron,job身份执行 | ||||||||||||
Copy 模块 | src来定义本地源文件路径;dest定义被管理主机文件路径;content使用指 定信息内容生成目标文件 [root@Ansible ~]# ansible Web01 -m copy -a 'src=/etc/hosts dest=/root owner=root mode=640 backup=yes' //将/etc/hosts拷贝到/root下,root用户拥有所有权,文件权限为640,备份 [root@Ansible ~]# ansible Web01 -m copy -a 'src=/etc/hosts dest=/root' //拷贝src源到dest目的下 如果分发的是脚本,那么需要先copy过去,然后再使用shell模块激活脚本。 但是这样批量执行脚本,会在目标服务器上残留脚本内容,还需批量删除,所以出现了script模块 | ||||||||||||
Script 模块 | 将本地脚本复制到管理主机的内存中运行,不会在管理主机留下脚本。 [root@Ansible ~]# ansible Web01 -m script -a '/root/1.sh' | ||||||||||||
Yum 模块 | name:指定软件包名字 state状态:present:安装软件包(默认)、absent:卸载软件包 [root@Ansible ~]# ansible Web01 -m yum -a 'name=httpd' //安装httpd包 [root@Ansible ~]# ansible Web01 -m yum -a 'name=httpd state=absent' //卸载httpd包 | ||||||||||||
Service 模块 | name:指定服务名字 state状态:started:启动、stopped:停止服务、restarted:重启服务、reloaded:平滑重启 enabled开机自启:true:开机自启、false:开启不自启 [root@Ansible ~]# ansible Web01 -m service -a 'name=firewalld state=started enabled=false' //开启防火墙,但并不开启自启 | ||||||||||||
User 模块 | name:用户名字 comment:指定用户的描述信息 createhome:是否创建家目录 uid:指定用户uid groups:指定用户的附加组(默认创建和用户同名的组) password:指定用户的密码 update_password:更新用户的密码 shell:指定用户登录模式:/bin/bash或/sbin/nologin home:指定用户的家目录路径 state状态:present:创建用户(默认)和absent:删除用户 remove:指定state=absent时,确认是否删除:ture和flase [root@Ansible ~]#ansible Web01 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=123123 shell=/bin/bash home=/home/yunjisuan' //创建用户 | ||||||||||||
Setup 模块 | 查看背管理主机的facts(facts是Ansible采集被管理主机设备信息的一 个功能)。每个被管理主机在接收运行管理命令前,都会将自己的相关信息(操作系统版本,IP等)发给控制机 [root@Ansible ~]# ansible Web01 -m setup | head //查看Web01地址等信息 | ||||||||||||
不通版本的系统可能命令不同,所以会导致使用阻碍。但是使用这些特殊的模块,可以无视不同的系统,达到命令的使用无误。 | |||||||||||||
常用案例 |
Linux基础——Ansible批量自动化管理工具(一)
于 2022-06-16 23:49:49 首次发布