批量管理工具:

(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批量管理工具的更多相关文章

  1. Linux中ansible批量管理软件部署及剧本编写

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...

  2. ansible批量管理工具的搭建与简单的操作

    ansible的安装 # [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ...

  3. Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务

    SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Worki ...

  4. windows下运行的linux服务器批量管理工具(带UI界面)

    产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...

  5. Linux下批量管理工具pssh安装和使用

    Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...

  6. 六.ansible批量管理服务

    期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. ...

  7. Ansible 批量管理Windows Server服务器

    Ansible批量管理Windows Server         Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppe ...

  8. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

  9. Linux 文件与目录管理,Linux系统用户组的管理

      一.Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...

随机推荐

  1. Linux基本监控项目

    1.网卡流量 (统计网卡TX(发送)RX(接受)流量脚本) 使用 Nagios 来监控网卡流量 2013/01/31 Nagios, 网卡 监控统计与日志分析 评论 2,272   下载地址为:che ...

  2. Linux 下安装 Python3

    Linux CentOS 7 安装 Python3: [root@localhost ~]$ yum install -y epel-release [root@localhost ~]$ yum i ...

  3. 如何理解精通PHP ?

    「精通 PHP」可以理解为以下三个: 精通「PHP 解析器 精通「PHP 语法.函数(这门语言) 精通「PHP 项目开发 1 精通「PHP 解析器」 可以从这里开始学习: PHP核心:骇客指南 :ht ...

  4. LeetCode - Nth Highest Salary

    题目大概意思是要求找出第n高的Salary,直接写一个Function.作为一个SQL新手我学到了1.SQL中Function的写法和变量的定义,取值.2.limit查询分    页的方法. 在这个题 ...

  5. pano2vr制作360全景图

    1.下载pano2vr中文破解版2.制作360全景选择"矩形球面投影" 3.输出格式选择HTML5, 也可选择Flash(快被淘汰) 4.HTML5输出选项中3个重要选项4.1 F ...

  6. 微信小程序 --- model弹框

    model弹框:在屏幕中间弹出,让你进行选择: 效果: 代码: <button type="primary" bindtap="btnclick"> ...

  7. 最短路和次短路的条数(dijstra算法或spfa算法)POJ3463

    http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissio ...

  8. 学习c++的50条忠告(转自C++百度贴吧)

    1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...

  9. javascript飞机大战-----002游戏引擎

    基本html布局 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. Redis连接(二)

    Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...