zoukankan      html  css  js  c++  java
  • Ansible-----3配置密钥&批量更新远程密码

    1、分发服务器安装ansible

    yum install -y ansible

    2、配置ansible到远程主机的ssh无密码登录的信任关系  (authoried_keys 模块)

    首先采用Ansible批量建立ssh无密码登录的信任关系!!

    [root@ansible-server ~]# ssh-keygen -t rsa          #一路回车
    [root@ansible-server ~]# ls /root/.ssh/
    id_rsa  id_rsa.pub
    ### 需要注意ssh建立互信的命令格式:
    # ssh-copy-id -i ~/.ssh/id_rsa.pub username@ip或hostname
      
    在客户机比较多的情况下,使用 ssh-copy-id命令的方法显然是有些费时,使用ansible-playbook 推送 ymal进行批量创建ssh互信关系就显得省事多了,
    这里就使用到了ansible的authoried_keys 模块:
    首先要配置ansible清单 (远程主机的密码这里为"123456")
    [root@ansible-server ~]# vim /etc/ansible/hosts
    ................
    ................
    [ssh-host]
    172.16.60.204
    172.16.60.205
    172.16.60.206
    172.16.60.207
      
    [ssh-host:vars]
    ansible_ssh_pass="123456"

    发送公钥到目标机器命令格式如下:

    vi /etc/ansible/ansible.cfg

    host_key_checking = False

    # ansible ssh-host -m copy -a "src=/root/.ssh/id_rsa.pub dest=/root/.ssh/authorized_keys mode=600"
    在上面分发密钥中,如果清单文件/etc/ansible/hosts里没有使用ansible_ssh_pass变量指明密码,则可以使用下面命令:
    这里默认ssh-host组下的机器root密码都一样,使用-k 参数,回车输入root密码即可:
    # ansible ssh-host -m authorized_key -a "user=root state=present key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }} "" -k

    编写playbook文件 

    [root@ansible-server ~]# vim /opt/ssh_key.yaml
    ---
      - hosts: ssh-host
        user: root
        tasks:
         - name: ssh-copy
           authorized_key: user=root key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
    注意上面yaml脚本中的"ssh-key-host"是在/etc/ansible/hosts清单文件里配置的远程客户机列表
    这里做的是基于远程主机root用户的ssh互信
      
    执行批量互信
    [root@ansible-server ~]# ansible-playbook /opt/ssh_key.yaml

     验证

    [root@m1 ~]#  ansible ssh-host -m shell -a "whoami"

     

    3、Ansible批量更新远程主机用户密码方法

    1、使用Ansible的user模块批量修改远程客户机的用户密码

    #由于在使用ansible修改用户密码的时候不能使用明文的方式,需要先加密,所以就需要使用一个方法对输入的明文的密码进行加密.
     
    [root@ansible-server ~]# vim /opt/root_passwd.yaml
    ---
      - hosts: ssh-host
        gather_facts: false
        tasks:
        - name: change user passwd
          user: name={{ item.name }} password={{ item.chpass | password_hash('sha512') }}  update_password=always
          with_items:
               - { name: 'root', chpass: 'kevin@123' }
               - { name: 'app', chpass: 'bjop123' }
     
    #注意上面在yaml文件中修改了远程客户机的root用户密码, app用户密码.
    # 如果还想要修改其他用户密码, 则继续按照上面规则添加即可!
     
    # 执行ansible-play
    [root@ansible-server ~]# ansible-playbook /opt/root_passwd.yaml

     2、修改远程主机的单个用户密码使用此方法比较方便

    # 编写playbook文件
    [root@ansible-server ~]# vim /opt/root_passwd2.yaml
    ---
      - hosts: ssh-host
        gather_facts: false
        tasks:
        - name: Change password
          user: name={{ name1 }}  password={{ chpass | password_hash('sha512') }}  update_password=always
     
    #执行ansible-playbook,  使用-e参数传递用户名和密码给剧本,其中root为用户名,admin#123就是修改后的root密码
    [root@ansible-server ~]# ansible-playbook /opt/root_passwd2.yaml -e "name1=root chpass=admin#123"        

    3、使用如下Ansible脚本, 适用于修改清单中部分远程主机的用户密码

    #编写ansible-playbook脚本 (需要注意下面脚本中"ens192"是客户机ip所在的网卡设备名称, 这个要根据自己实际环境去配置, 比如eth0, eth1等)
    [root@ansible-server ~]# cat /opt/root_passwd4.yaml
    - hosts: test-host
      remote_user: root
      tasks:
      - name: change password for root
        shell: echo '{{ item.password }}' |passwd --stdin root
        when: ansible_ens192.ipv4.address  == '{{ item.ip }}'
        with_items:
         - { ip: "172.16.60.220", password: 'haha@123' }
         - { ip: "172.16.60.221", password: 'kevin@123' }
         - { ip: "172.16.60.222", password: 'bobo@123' }
     
    # 执行ansible-playbook:
     [root@ansible-server ansible]# ansible-playbook /opt/root_passwd3.yaml

    如果ansible服务端没有和远程主机做ssh信任关系, 则可以在hosts清单配置里直接指明用户名和密码. 直接登录,,没有配置密钥的情况是用密码登录,一般不用

    如果使用普通用户, 并且允许sudo, 则需要提前在客户机里的/etc/sudoers文件里配置好该普通用户的sudo配置, 即允许该普通用户有sudo权限.
    [ssh-host]
    #192.168.1.95 
    192.168.1.96
    192.168.1.100
    192.168.1.26
    192.168.1.27 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
    172.16.60.222 ansible_ssh_user=app ansible_ssh_pass=123456 ansible_ssh_port=22 ansible_sudo_pass=123456

    end...

  • 相关阅读:
    ETL工具主流产品
    深入了解当前ETL中用到的一些基本技术
    用C#实现通用守护进程
    80端口被system占用的问题
    Python Web 性能和压力测试 multi-mechanize
    [python]用profile协助程序性能优化
    python代码优化技巧
    转:Java学习路线图
    SecureCRT 颜色
    深度学习(Deep Learning)算法简介
  • 原文地址:https://www.cnblogs.com/edeny/p/14066981.html
Copyright © 2011-2022 走看看