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的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...
随机推荐
- Ini操作类
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- shell基础篇(一)从hello world开始
前记:这里是我做的shell笔记:接下来会提供一系列. Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本.Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等 ...
- jq如何实现内容的无限滚动
html: <div> <ul> <li>1</li> <li>2</li> <li>3</li> &l ...
- PostgreSQL数据库smallint、bigint转到Oracle,要用什么类型替代? 是number么,那长度分别是多少?
个人意见,仅供参考:smallint是有符号或无符号2字节的整数,范围是0-65,536,5位整数bigint是有符号或无符号8字节的整数,范围是0-18,446,744,073,709,551,61 ...
- 时序数据库技术体系 – InfluxDB 多维查询之倒排索引
本文转自: http://hbasefly.com/2018/02/09/timeseries-database-5/ 在时序数据库概述一文中,笔者提到时序数据库的基础技术栈主要包括高吞吐写入实现.数 ...
- VIM 多行注释与取消
注释: 在使用vim的过程中, 注释是一个比较烦人的事情,要一行一行注释,或者用/* */来注释 下面这种方法可以快捷的进行多行注释. 1.进入vi/vim编辑器,按CTRL+V进入可视化模式(VIS ...
- LeetCode——Find Minimum in Rotated Sorted Array
Description: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 ...
- Linux find、grep命令详细用法
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下:find命令 find命令的一般形式 ...
- 新浪通过API分享 实践
注:如果集成了百度的Frontia和SinaCoreSDK, 那么SSO会出现包冲突 https://github.com/sinaweibosdk/weibo_android_sdk/issues/ ...
- 最大网络流(Dinic)
hdu1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...