Playbook脚本——使用Ansible-authorized_key模块实现主机批量拷贝密钥

环境搭建

  • 由于是自建环境,使用时需要安装环境
ansible-galaxy collection install ansible.posix

通过此命令便可以只用 authorized_key 模块了

  • 在未执行上述命令时是没有 authorized_key 的手册的
    image

  • 执行 ansible-doc -l | grep -i authrized 命令
    image

实现目标

  • 为远程受管理主机创建新用户,并能够使用 ssh 实现免密登录

命令

  • 要求使用管理主机的 root 用户执行代码
---
- name: set public key on remote hosts
  hosts: servera 
  # 受管理主机或主机组
  become: no
  remote_user: root
  tasks:
    - name: set secondary group for rhce
      user:
        name: rhce
        groups: wheel
        append: yes
    - name: Set authorized key taken from file
      ansible.posix.authorized_key:
        user: rhce
        state: present
        key: "{{ lookup('file', '/home/rhce/.ssh/id_rsa.pub') }}"
		# 控制主机的普通用户密钥地址

    - name: Change file ownership, group and permissions
      ansible.builtin.file:
        path: /etc/sudoers
        mode: '0644'
    - name: Ensure /etc/suders no passwd 
      ansible.builtin.lineinfile:
        path: /etc/sudoers
        insertafter: '^%sudo '
        line: '%wheel   ALL=(ALL:ALL)  NOPASSWD: ALL'

    - name: Change file ownership, group and permissions
      ansible.builtin.file:
        path: /etc/sudoers
        owner: root
        group: root
        mode: '0440'

问题及解决方案

受控主机连接问题

fatal: [serverf]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this .

image

解决方法

  • 方案1
    • 在 ansible.cfg 中添加 host_key_checking = False
  • 方案2
    • 先使用 root 用户 ssh连接,使 root 用户中 know_host 保存来自受控主机的 host_key

执行脚本时的问题

image

  • root 用户下没有执行 ansible-galaxy collection install ansible.posix

解决方法

  • 切换至 root 用户执行一下命令
ansible-galaxy collection install ansible.posix
posted @ 2022-07-31 22:08  Demon丶安梓  阅读(527)  评论(0编辑  收藏  举报