Ansible实现N+服务器的免密配置及用户分权

场景一、实现密钥对的推送及更新

1、Ansible的安装

yum -y install ansible
[root@ANSIBLEM1 ~]# vim /etc/ansible/ansible.cfg
# 将[defaults]里面的 host_key_checking = False 和 remote_port = 22 前的#去掉,ssh在首次连接出现检查keys 的提示,通过设置,不会有这些提示
remote_port = 22
host_key_checking = False

2、hosts清单的配置

# 服务器上创建ansible用户

vim /etc/ansible/hosts

[all]
192.168.100.12
192.168.100.13

[ssh_key]
192.168.100.12 
192.168.100.13 
                                                                                  

# 主机列表中的ansible_ssh_user和ansible_ssh_pass变量,指向当前的key可以验证当前的登录信息

3、自动推送剧本

按照目前的环境 应该是 已经推送过一遍公钥的,所有服务器上面都使用的同一个公钥,实现密钥对更新,将生成的私钥更新到 对应服务器的authorized_keys,直接顶替掉旧的公钥,并且将生成的私钥配置到ansbile的ssh-file验证路径下,保管好私钥即可

配置剧本

创建操作目录

mkdir /playbook & cd /playbook

vim ssh-key.yaml

---
 - hosts: all
   remote_user: root
   tasks:
        - name: 推送公钥
          copy: 'src=/root/.ssh/id_rsa.pub  dest=/root/.ssh/authorized_keys'

配置ansible.cfg,指向私钥路径,才能与hosts中的服务器进行通讯(所以私钥更新后也要在路径中指向新的私钥)

咱们为了在一条路径下完成所有操作 这里将文件的位置放到playbook中

vim /etc/ansible/ansible.cfg

再编辑一个脚本方便一些

vim key.sh

#!/bin/bash

mv /root/.ssh/id_rsa /playbook/key

这样就可以了 需要更新密钥时,先使用ssh-keygen 生成私钥和公钥,再使用ansible将公钥推送到服务器群,最后将私钥移动到ansible的配置目录,自己再保留就可以了。

场景二、用户权限问题

避免新的运维人员再不熟悉公司业务的情况下权限过高,所以再权限分配的过程中最好给到适中权限而非root

1、创建一个devops新用户

useradd devops

passwd devops

su devops

2、在devops用户下生成密钥对

ssh-keygen

3、返回root用户,编写剧本

su root

vim /playbook/devops.yaml

---
- hosts: ssh_key
  remote_user: root
  tasks:
    - name: 创建devops用户
      user:
        name: devops
        shell: /bin/bash
        create_home: yes
        state: present
  tasks:
    - name: 推送devops的公钥
      authorized_key: user=devops key="{{ lookup('file', '/home/devops/.ssh/id_rsa.pub') }}" state=present

vim devops.sh

#!/bin/bash

mv /home/devops/.ssh/id_rsa /playbook/dpkey


Ansible实现N+服务器的免密配置及用户分权
https://www.gmqgmq.cn//archives/ssh-key
作者
啊耿不累
发布于
2025年03月21日
许可协议