先定义下涉及的三个对象:
源机器:需要连接到目标机器的机器
目标机器:源机器需要连接的机器
ansible主机:操作管理目标机器,相当于代理机器
实现原理就是源机器本地生成ssh的私钥和公钥,将公钥发送给ansible主机,ansible主机再推送到目标机器,这样源机器就可以根据私钥去连接到目标机器,撤销就是ansible主机根据公钥从目标机器撤销对应的公钥,这样源机器与目标机器就失去了连接
ansible脚本
使用playbook接收命令传递的参数,实现对指定目标机器管理授权
- hosts: "{{host}}"
user: zhj
tasks:
- name: push_ssh_key
authorized_key: user=zhj key="{{ lookup('file', '/etc/ansible/rsa_pubs/ssh-key-id-rsa-pubs/{{key_name}}') }}"
when: tag == "0"
- name: remove_ssh_key
authorized_key: user=zhj key="{{ lookup('file','/etc/ansible/rsa_pubs/ssh-key-id-rsa-pubs/{{key_name}}') }}" state=absent
when: tag == "1"
tags:
- sshkey
主要参数详解
hosts:目标机器ip
user:ansible主机连接目标机器的用户
tasks:playbook的子任务
- name: 子任务名称
authorized_key:user:目标主机授权的用户 key:使用lookup函数读取公钥文件,key_name参数由命令传递进来 state=absent:撤销公钥,没有此参数则是添加公钥
when:条件判断,根据命令传递的tag参数判断是否执行此子任务
授权命令
添加授权
ansible-playbook playbook/push-ssh.yml -e "host=192.168.3.29 key_name=huobojun.pub tag=0"
撤销授权
ansible-playbook playbook/push-ssh.yml -e "host=192.168.3.29 key_name=huobojun.pub tag=1"