zoukankan      html  css  js  c++  java
  • Ansible playbook 批量修改服务器密码 先普通后root用户

     

     

    Ansible playbook 批量修改服务器密码

    客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3

    背景:服务器有CentOS67SuSE9、10、11,root不能直接登录,需先登录普通用户,再切换到root

    首先在hosts 下面添加一个组[test],下面跟ip,每行一个。

     

    ansible基于ssh连接inventory中指定的远程主机时,将以此处的参数指定的属性进行;

    ansible_ssh_port

    指定ssh 端口

    ansible_ssh_user

    指定ssh用户

    ansible_ssh_pass

    指定ssh用户登录是认证密码,明文密码不安全

    ansible_sudo_pass

    指明sudo时候的密码

    cat /etc/ansible/hosts
    [test]
    192.168.153.132
    ansible_ssh_user=ly ansible_ssh_pass=a ansible_su_pass=a

    修改密码的脚本如下:

    cat pswd.sh
    #!/bin/bash
     
    #``里面的内容是获取主机名后3位,架设主机名为zabbix-agent,则``里面出来的就是ent
    #将Rfv5%+ent赋值给xx
    xx=Rfv5%+`hostname|grep -oP '...$'`
    #修改root密码为Rfv5%+ent,一定要记得是双引号
    echo "$xx"|passwd --stdin root

    main.yaml如下:

    ---
    - hosts:  test
      remote_user: toptea
    
      tasks:
      - name: transfer file to server
        copy: src=/root/pswd.sh dest=/tmp/pswd.sh mode=755
    
      - name: zhixing 
        become: yes
        become_method:  su
        shell:  /bin/bash -x /tmp/pswd.sh

    执行命令即可:

    ansible-playbook main.yaml

    8ef69d80139c7248e6a4e17da1110ff4.png-wh_

    Playbooks可以称为是Ansible的配置,部署,编排语言。在Playbooks中,你可以定义远程主机要执行的某组动作。

    举例子:希望远程主机先安装httpd,然后将本地配置好的配置文件替换远程主机的配置文件,然后启动该服务。

    感觉和一个shell脚本差不多吧。

    Playbooks使用的是 yaml 语言,语法做到最小化。

    playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.

    下面以如下Playbooks为例讲解多个特性

    ---
    - hosts:  test
      remote_user: toptea
     
      tasks:
      - name: transfer file to server
        copy: src=/root/pswd.sh dest=/tmp/pswd.sh mode=755
     
      - name: zhixing
        become: yes
        become_method:  su
        shell:    /bin/bash -x /tmp/pswd.sh

    主机与用户

    hosts行的内容是要执行任务的目标机器,可以是单个ip,可以是某个主机组

    remote_user: ansible 是通过ssh交互的,这里填的就是你能ssh登录服务器的用户。

    - hosts:  test
      remote_user: toptea

    remote_user 可以是全局的,也可以每一个任务定义一个。 如下这个tasks就是用ly去连接执行。

    - hosts:  test
      remote_user:  toptea
      tasks:
      - name: test
        ping:
        remote_user:  ly

    也可以通过su、sudo去执行

    - hosts:  test
      remote_user:  toptea
      sudo: yes

    每一个play包含了一个tasks列表,这个task执行完毕后才会去执行下一个task

    tasks:
      - name: transfer file to server
        copy: src=/root/pswd.sh dest=/tmp/pswd.sh mode=755

       

     如下tasks,name 就相当于标识,让你知道这是干嘛的。

     这里是执行从本机拷贝pswd.sh到test主机组里面的主机,并将权限设置为755

     接下来则是切换到su去执行 命令。

     become:        yes        是否允许身份切换

     become_method: su   #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo

    become_user: root 切换指定的用户

      tasks:
      - name: transfer file to server
        copy: src=/root/pswd.sh dest=/tmp/pswd.sh mode=755
     
      - name: zhixing
        become: yes
        become_method:  su
        shell:    /bin/bash -x /tmp/pswd.sh
     
    分类: Ansible------------------------------------------------------------------------------------------------------------
     

    - hosts: '` hosts `'

    user: ansible

    sudo: yes

    sudo_user:root

    roles:

    playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。

    hosts:用于指定要执行指定任务的主机其可以是一个或多个由冒号分隔主机组。

    remote_user :用于指定远程主机上的执行任务的用户。不过remote_user也可用于各task中。也可以通过指定其通过sudo的方式在远程主机上执行任务其可用于play全局或某任务。此外甚至可以在sudo时使用sudo_user指定sudo时切换的用户。

    user:于remote_user相同

    sudo:如果设置为yes,执行该任务组的用户在执行任务的时候,获取root权限

    sudo_user:如果设置user为breeze,sudo为yes,sudo_user为bernie时,则breeze用户在执行任务时会获得bernie用户的权限

    connection:通过什么方式连接到远程主机,默认为ssh

    gather_facts:除非明确说明不需要在远程主机上执行setup模块,否则默认自动执行。如果确实不需要setup模块传递过来的变量,则可以将该选项设置为False

    示例:

    - hosts: webnodes
    tasks:
    - name: test ping connection:
    remote_user: test
    sudo: yes

     

  • 相关阅读:
    Command 命令模式
    Composite 组合模式
    Decorator 装饰器模式
    Abstract Factory 抽象工厂模式
    输入框测试重点:
    w​e​b​网​站​常​用​测​试​用​例
    性能测试常见分类
    Web 常用的测试方法
    em、rem和px的区别
    [if lt IE 9]等符号的含义
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/8213527.html
Copyright © 2011-2022 走看看