Linux系统——Ansible批量管理工具
批量管理工具:
(1)ansible 操作简单(适用于500台以下服务器)
(2)saltstack 比较复杂(一般适用于1000-4w台服务器)
(3)puppet超级复杂
systemctl(统一管理命令)
chkconfig、service等的功能都被systemctl替代
# system stop iptables.service(7.5版的防火墙是firewalld,企业中一般不用firewalld,直接关闭 # systemctl stop firewalld)
#enable disable(开启或关闭服务的开机自启动)
# stop start (立即开启或关闭服务)
# status(状态)
# systemctl stop firewalld(关闭防火墙服务)
# systemctl disable firewalld(关闭防火墙服务的开机自启动)
# systemctl stop NetworkManager(用来代替网卡的配置文件,管理网络,优先级高过配置文件,但是有事会出现网卡换了个IP,但重启以后未生效,就是这个服务造成的,还会导致IP 掉线)
# systemctl disable NetworkManager
部署环境时的设置
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager
安装和yum有关的所有yum源
# yum -y install epel-release
ansible特点:
通过一台管理机远程批量操作多台(500以下),无需客户端(saltstack需要安装客户端),基于Python,ansible利用ssh通道(操作要进行免密钥)
生产环境中ansible管理服务器是直接连接超级用户的,需要做很多安全处理
(1)修改ssh登录
# vim /etc/ssh/sshd_config
17行 Port 22端口改为1万以上
38行PermitRootLogin yes改为no 设为禁止超级用户远程登录(最后改动,避免掉线)
43行PubkeyAuthentication yes 默认开启,否则密钥验证就会失效
47行AuthorizedKeysFile .ssh/authorized_keys 公钥文件的位置
65行PasswordAuthentication yes 是否开启密码验验证登陆(最后设置)
79行GSSAPIAuthentication yes 是否关GASSPI认证
115行UseDNS yes 改为no 关闭DNS反向解析,提高ssh解析速度
# vim /etc/ssh/ssh_config
将StrickHostKeyChecking 的no改为yes
修改完配置文件后重启,用普通用户登录
创建普通用户
# useradd yunjisuan
客户端创建密钥,传递公钥连接到服务端的超级用户(将原公钥删除),将客户端的私钥放到xshell中,用免密方式导入到客户端,连接登录到服务端
# scp ~/.ssh/id_rsa.pub 192.168.214.144:/home/yunjisuan
(现在已经使用密钥登录服务端了)
此时修改sshd的配置文件,将第65行的PasswordAuthentication的yes改为no
重启配置文件后,已经不能使用密码登录了,必须使用私钥才能登陆
(2)设置xshell私钥登录linux
# cd .ssh
# cp authorized_keys /home/yunjisuan
# mkdir -p .ssh
# chmod 700 .ssh
# mv authorized_keys .ssh/
# chown -R yunjisuan.yunjisuan .ssh
新建xshell会话框,ip为客户端IP地址,用公钥登录普通用户
(3)用户权限策略
(a)给普通用户设置权限,visudo(在root端)
yunjisuan ALL= NOPASSWD:ALL
(b)查看用户授权情况
# sudo -l
(c)# sudo su -
提权到超级用户
(d)修改/etc/ssh/sshd_config的配置要求(在root端)
重启后(#systemctl reload sshd),登录普通用户,更改端口号,再sudo su - 连接超级用户
(1)配置ansible管理服务sudo审计日志
开启sudo日志
# echo "local2.debug /var/log/sudo.log" >> /etc/rsyslog.conf
# echo "Defaults logfile=/var/log/sudo.log" >> /etc/sudoers
测试sudo日志记录
[root@ansible ~]# exit
登出
[yunjisuan@ansible ~]$ sudo su -
[sudo] yunjisuan 的密码:
上一次登录:日 9月 9 21:40:11 CST 2018pts/0 上
查看/var/log/sudo.log日志
[root@ansible ~]# cat /var/log/sudo.log
Sep 9 21:49:12 : yunjisuan : TTY=pts/0 ; PWD=/home/yunjisuan ; USER=root ;
COMMAND=/bin/su -
(5)安装ansible
# yum -y install epel-release
[root@ansible ~]# yum -y install ansible
[root@ansible ~]# ansible --version
(2)配置主机清单
# > /etc/ansible/hosts
# vim /etc/ansible/hosts
[nginx](模块名)
WebA ansible_ssh_host=192.168.214.123 (Web服务器的名字+IP地址)
WebB ansible_ssh_host=192.168.214.124 ansible_ssh_pass=666666
若已设置免密钥,配置完毕
ansible_ssh_host:被管理主机IP
ansible_ssh_user:被管理主机用户名
ansible_ssh_pass:被管理主机用户的登陆密码
ansible_sudo_pass:被管理主机用户sudo时的密码
(3)设置SSH免密钥登录
# ssh-keygen
# ssh-copy-id 192.168.214.140
# ssh-copt-id 192.168.214.145
(7)Ansible服务器简单的综合安全管理策略
(1)禁止非root用户查看Ansible管理服务器端/etc/hosts文件
# chmod 600 /etc/hosts
(2)禁止非root用户查看Ansible的主机清单配置文件
# chmod 600 /etc/ansible/hosts
Ansible的基础应用
Ansible可以使用命令行的方式进行自动化管理。命令的基本语法如下所示:
ansible <被操控的主机或主机组或all> [-m 模块名] [-a 具体命令]
# ansible Web01 -m command -a 'uptime'
主机组名====> /etc/ansible/hosts里设定的nginx,apache,web
主机名====> Web01,Web02
all ====>/etc/ansible/hosts里设定的所有主机
模块名====> command,cron,shell,file等
(1)ping模块
作用:检测指定主机的连通性
格式
# ansible 被管理范围 -m 模块 -a 具体命令
# ansible WebA -m ping (分发单主机WebA的信息)
# ansible nginx -m ping (分发模块(主机组)下的信息)
# ansible all -m ping (分发所有被管理的主机信息)
(2)command模块
在远程主机执行命令,不支持管道符和重定向等复杂命令,可完全被shell模块替代
# ansible Web01 -m command -a 'uptime'
(3)shell模块
可以在被管理主机上运行命令,并支持像管道符重定向这样的复杂命令
# ansible Web01 -m shell -a 'echo 123123 | passwd --stdin yunjisuan'
在所有被管理的主机的/etc/hosts文件里添加Ansible管理服务器的IP地址映射
ansible all -m shell -a 'echo "ansible 192.168.200.183" >> /etc/hosts'
(4)cron模块
cron模块用于定义任务计划。主要包括两种状态(state)
crontab时间周期: (若哪个不写就是默认*号,都不写默认5个*号)
minute:分钟
hour:小时
day:日期
month:月份
weekday:周期
crontab任务:
job:指明运行的命令是什么
crontab任务描述:
name:定时任务描述(定时任务清除的依据)
state状态:
present:表示添加(省略状态时默认使用);
absent:表示移除;
crontab任务的用户身份:
user:指定定时任务以哪个用户身份执行
添加定时任务计划,在所有被管理的主机里每十分钟输出hello字符串,定时任务描述为test cron job
# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
删除描述为test cron job的定时任务
# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=”absent”'
若不成功,用下面的命令去执行
# ansible all -m shell -a 'crontab -r'
给Web01服务器上的普通用户yunjisuan添加一个定时任务
# ansible Web01 -m shell -a 'id yunjisuan'
# ansible Web01 -m cron -a 'minute="*/10" job="/bin/echo hello" name="yunjisuan cron job" user="yunjisuan"'
# ansible Web01 -m shell -a 'crontab -u yunjisuan -l'
# ansible Web01 -m cron -a 'minute="*/10" job="/bin/echo hello" name="yunjisuan cron job" user="yunjisuan" state="absent"'
# ansible Web01 -m shell -a 'crontab -u yunjisuan -l'
(5)copy模块
copy模块用于实现文件复制和批量下发文件。其中使用src来定义本地源文件路径;使用dest定义被管理主机文件路径;使用content则是使用指定信息内容来生成目标文件
复制时,被管理主机下写具体文件名,可用来改名字
Backup=yes 表示备份,覆盖文件的同时,备份一份
将本地的/etc/hosts文件拷贝到所有被管理的主机的/etc/hosts路径下覆盖同名文件,并指定属主和权限,若拷贝的文件与目标文件内容不同,则备份目标文件再覆盖。
# ansible all -m shell -a 'tail -1 /etc/hosts'
# echo "web01 192.168.200.184" >> /etc/hosts
# ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts owner=root mode=640 backup=yes'
# ansible all -m shell -a 'ls /etc/hosts*'
# ansible all -m shell -a 'tail -1 /etc/hosts'
将本地/tmp/test.sh的脚本复制到远程主机上并远程激活
(6)script模块
可以将本地脚本复制到被管理主机的内存中并运行,不会在被管理主机中留下脚本文件
编写一个脚本,然后通过ansible的script模块远程向被管理主机执行此脚本(直接显示脚本的内容执行结果)
# echo 'echo "1111" >> /tmp/test' >> /tmp/test.sh
# cat /tmp/test.sh
echo "1111" >> /tmp/test
# ansible all -m script -a '/tmp/test.sh'
Scp+ssh与script区别
scp+ssh的脚本在对方用户,远程激活也是在对方用户
Script模块是把本地的脚本不留痕迹的激活在对方的内存里
(7)yum模块
利用yum模块安装软件包,虽然能被shell模块替代
但是用yum模块更显专业一些
软件包名:
name:指定软件包的名字
state状态:
present:安装软件包(默认就是这个)
absent:卸载软件包
(8)service模块
利用service模块管理服务程序,虽然能被shell模块替代
但是用service模块更显专业一些
服务名称:
name:指定服务的名字
state状态:
started:启动服务
stopped:停止服务
restarted:重启服务
reloaded:平滑重载
enabled开机自启动:
true:设置开机自启动
false:设置开启不启动
#启动firewalld并设置开机自启动
[root@ansible ~]# ansible Web01 -m service -a 'name=firewalld state=started enabled=true'
#关闭firewalld并设置开机不启动
[root@ansible ~]# ansible Web01 -m service -a 'name=firewalld state=stopped enabled=false'
(9)user模块
用户管理模块。管理用户账号
指定用户名
name:指定操作的用户的名字
用户描述
comment:指定用户的描述信息
createhome:是否创建家目录
uid:指定用户的uid号
groups:指定用户的附加组(默认创建和用户名相同的组)
password:指定用户的密码
update_password:更新用户的密码
shell指定用户的登陆方式
(1)/bin/bash:能登录系统
(2)/sbin/nologin:不能登录系统
home:指定用户的家目录路径
state状态:
(1)present:创建用户(默认就是这个)
(2)absent:删除用户
remove:当指定state=absent时,确认是否删除用户家目录
(1)true
(2)false
在Web02上创建一个普通用户yunjisuan,并设置用户的密码为123123
[root@ansible ~]# ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=123123 shell=/bin/bash home=/home/yunjisuan'
利用ansible的user模块状态用户时要注意在password参数的后边添加密文,否则不能登陆用户,需要通过Python的pip程序安装passlib即可为密码加密
安装Python2的pip工具,并通过pip工具安装Python的加密模块来给密码加密
[root@ansible ~]# yum -y install epel-release
[root@ansible ~]# yum -y install python2-pip
[root@ansible ~]# pip install passlib
#删除之前创建的yunjisuan用户,并删除它的家目录
[root@ansible ~]# ansible Web02 -m user -a 'name=yunjisuan state=absent remove=true'
继续在Web02上创建yunjisuan用户
ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=$6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1 shell=/bin/bash' home=/home/yunjisuan'
(10)setup模块
查看被管理主机的facts(facts是Ansible采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前,都会将自己的相关信息(操作系统版本,IP地址等)发送给控制主机
查看远程主机的facts信息
[root@ansible ~]# ansible Web01 -m setup | head
修改主机名
(1)临时修改主机名
# hostname
(2)永久修改主机名
# vim /etc/hostname
修改服务启动和开机自启动用systemctl修改
(1)开启/关闭服务用start/stop
(2)开启/取消开机自启动 用enable/disable
防火墙firewalld
克隆机必关服务
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl stop NetworkManager
# systemctl disable NetworkManager
Linux系统——Ansible批量管理工具的更多相关文章
- Linux中ansible批量管理软件部署及剧本编写
服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...
- ansible批量管理工具的搭建与简单的操作
ansible的安装 # [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ...
- Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务
SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Worki ...
- windows下运行的linux服务器批量管理工具(带UI界面)
产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...
- Linux下批量管理工具pssh安装和使用
Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...
- 六.ansible批量管理服务
期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. ...
- Ansible 批量管理Windows Server服务器
Ansible批量管理Windows Server Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具, 它用Python写成,类似于saltstack和Puppe ...
- 【Python之旅】第六篇(七):开发简易主机批量管理工具
[Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...
- Linux 文件与目录管理,Linux系统用户组的管理
一.Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...
随机推荐
- Linux基本监控项目
1.网卡流量 (统计网卡TX(发送)RX(接受)流量脚本) 使用 Nagios 来监控网卡流量 2013/01/31 Nagios, 网卡 监控统计与日志分析 评论 2,272 下载地址为:che ...
- Linux 下安装 Python3
Linux CentOS 7 安装 Python3: [root@localhost ~]$ yum install -y epel-release [root@localhost ~]$ yum i ...
- 如何理解精通PHP ?
「精通 PHP」可以理解为以下三个: 精通「PHP 解析器 精通「PHP 语法.函数(这门语言) 精通「PHP 项目开发 1 精通「PHP 解析器」 可以从这里开始学习: PHP核心:骇客指南 :ht ...
- LeetCode - Nth Highest Salary
题目大概意思是要求找出第n高的Salary,直接写一个Function.作为一个SQL新手我学到了1.SQL中Function的写法和变量的定义,取值.2.limit查询分 页的方法. 在这个题 ...
- pano2vr制作360全景图
1.下载pano2vr中文破解版2.制作360全景选择"矩形球面投影" 3.输出格式选择HTML5, 也可选择Flash(快被淘汰) 4.HTML5输出选项中3个重要选项4.1 F ...
- 微信小程序 --- model弹框
model弹框:在屏幕中间弹出,让你进行选择: 效果: 代码: <button type="primary" bindtap="btnclick"> ...
- 最短路和次短路的条数(dijstra算法或spfa算法)POJ3463
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- 学习c++的50条忠告(转自C++百度贴吧)
1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...
- javascript飞机大战-----002游戏引擎
基本html布局 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Redis连接(二)
Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...