zoukankan      html  css  js  c++  java
  • Linux系统——Ansible批量管理工具

    批量管理工具:

    (1)ansible 操作简单(适用于500台以下服务器)

    (2)saltstack 比较复杂(一般适用于1000-4w台服务器)

    (3)puppet超级复杂

    systemctl(统一管理命令)

    chkconfigservice等的功能都被systemctl替代

    # system stop iptables.service7.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需要安装客户端),基于Pythonansible利用ssh通道(操作要进行免密钥)

    生产环境中ansible管理服务器是直接连接超级用户的,需要做很多安全处理

    (1)修改ssh登录

    # vim /etc/ssh/sshd_config

    17Port 22端口改为1万以上

    38PermitRootLogin yes改为no 设为禁止超级用户远程登录(最后改动,避免掉线)

    43PubkeyAuthentication yes 默认开启,否则密钥验证就会失效

    47AuthorizedKeysFile .ssh/authorized_keys 公钥文件的位置

    65PasswordAuthentication yes 是否开启密码验验证登陆(最后设置)

    79GSSAPIAuthentication yes 是否关GASSPI认证

    115UseDNS 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行的PasswordAuthenticationyes改为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 的密码:

    上一次登录:日 99 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

    7Ansible服务器简单的综合安全管理策略

    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里设定的nginxapacheweb

    主机名====> Web01,Web02

    all ====>/etc/ansible/hosts里设定的所有主机

    模块名====> commandcronshellfile

    (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'

     

    3shell模块

    可以在被管理主机上运行命令,并支持像管道符重定向这样的复杂命令

    # 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'

    4cron模块

    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'

    5copy模块

    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模块

    可以将本地脚本复制到被管理主机的内存中并运行,不会在被管理主机中留下脚本文件

    编写一个脚本,然后通过ansiblescript模块远程向被管理主机执行此脚本(直接显示脚本的内容执行结果)

    # 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+sshscript区别

    scp+ssh的脚本在对方用户,远程激活也是在对方用户

    Script模块是把本地的脚本不留痕迹的激活在对方的内存里

    (7)yum模块

    利用yum模块安装软件包,虽然能被shell模块替代
    但是用yum模块更显专业一些

    软件包名:

    name:指定软件包的名字

    state状态:

    present:安装软件包(默认就是这个)

    absent:卸载软件包

    8service模块

    利用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时,确认是否删除用户家目录

    1true

    2false

    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'

     

    利用ansibleuser模块状态用户时要注意在password参数的后边添加密文,否则不能登陆用户,需要通过Pythonpip程序安装passlib即可为密码加密

    安装Python2pip工具,并通过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'

     

    10setup模块

    查看被管理主机的factsfactsAnsible采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前,都会将自己的相关信息(操作系统版本,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

  • 相关阅读:
    Hera 是一个用小程序方式来写跨平台应用的开发框架
    小程序架构设计(一)
    监控里面可观测性的黄金三角
    认清现实,放弃幻想
    系统监控的四个黄金指标
    Python爬虫爬取动态页面思路+实例(一)
    让人又爱又恨的HtmlUnit,你一定要了解一下
    JAVA实现网页抓取(htmlunit)
    使用HtmlUnit获取html页面
    c# 抓取 js动态生成的HTML的工具:NHtmlUnit‎
  • 原文地址:https://www.cnblogs.com/daisy118/p/10009808.html
Copyright © 2011-2022 走看看