使用ansible对远程主机上的ssh公钥进行批量分发或者是删除修改操作

ansible内置了一个authorized_key模块,这个模块很好用,我们使用这个模块可以对远程
主机上的ssh公钥进行批量删除,添加或者修改的操作,官网地址:
http://docs.ansible.com/ansible/latest/modules/authorized_key_module.html#id1 从官网上可以看到,这个模块是使用playbook的形式进行配置的:
默认有如下几个参数,因为官网是按字母表的顺序排列的,这里我们为了理解的更清晰起见,
我们将这些参数的顺序改成我们想要的顺序如下: comment: 对整个文件的注释
exclusive: 是否移除远程主机authorized_keys文件中其它非指定的ssh公钥,这里默认是no,
我们这里也一般不删除远程主机上的其他公钥,我们可以用这个命令清除远程主机
上的其他ssh公钥。
key_options: 附加到公钥开头的字符串,这里多指注释文件,默认没有,我们可以不填。
validate_certs: 指定是否进行tls/ssl证书认证,默认为开启,这里这个参数的作用是只有在key那个参数
指定为网络传输的时候才有效,比如我们将公钥放在github上,默认就可以设置为开启或关
闭。
manage_dir: 指定模块是否拥有权限管理authorized_keys文件所的目录。默认值为yes,也就是说
第一次分发公钥的时候,模块可以为我们自动创建这么一个目录及文件,并设置好权限,
如果我们要指定其他的存放ssh公钥的目录,这里这个值要设置为yes,并在后面的path中
指定ssh公钥所存放的文件的目录。
state: 添加ssh公钥到远程主机还是删除远程主机上对应的公钥,参数present是添加,absent是删除。
key: 本机公钥所存放的路径
user: 远程主机的用户名
path: 这个参数可以不填,默认就是指的远程主机上的用户家目录下的.ssh下的authorized_keys文件:
即:(homedir)+/.ssh/authorized_keys 一般这几个参数,我们只会用到后面的这个五个,而且manage_dir和path都是设置为默认值即可。 首先我们需要修改ansible的inventory文件:即/etc/ansible/hosts文件:
我们在传密钥之前,主机组的格式应该如下:
[unknown]
ansible001 ansible_ssh_user=root ansible_ssh_host=123.56.221.190 ansible_ssh_pass="密码"
从左到右依次为:
主机名 远程主机上需要控制的用户名 用户IP地址 用户密码 而我们传完密钥之后,主机组的格式应该如下:
[unknown]
ansible001 ansible_ssh_host=123.56.221.190 也就是说只有第一次传输密钥需要密码文件,以后就再也不需要了。
在传密钥之前,我们可以先查看下远程客户端是否已经有authorized_key文件:
ansible unknown -a "ls /root/.ssh/"
因为unknown用户组里面用户和密码都有了,因此这个命令也能执行。 一个官方网站的例子:
- name: Set authorized key took from file
authorized_key:
user: charlie
state: present
key: "{{ lookup('file', '/home/charlie/.ssh/id_rsa.pub') }}" #这里我们写一个通用的公钥分发的yaml文件:
vim copy_ssh_public_keys.yaml - name: Set authorized key took from file
authorized_key:
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" #本机的公钥地址
user: root #被控制的远程服务上的用户名
state: present #模式为添加公钥 传送ssh公钥:
ansible-playbook /etc/ansible/copy_ssh_public_keys.yaml -f 传完之后再次查看远程主机是否已经有了authorized_key文件:
ansible unknown -a "ls /root/.ssh/"
此时应该可以看到远程主机应该已经有了authorized_key这个文件。 至此我们的ssh公钥就分发完毕了。
这里我们再写几个其他的例子: #.分发当前ssh公钥并清除之前所有的公钥:
- name: Set authorized key took from file
authorized_key:
exclusive: True #清除远程主机之前所有的其他公钥
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" #本机的公钥地址
user: root #被控制的远程服务上的用户名
state: present #模式为添加公钥
#.删除远程主机上指定的当前的ssh公钥:
- name: Set authorized key took from file
authorized_key:
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" #本机的公钥地址
user: root #被控制的远程服务上的用户名
state: absent #删除远程主机上指定的当前ssh公钥

使用ansible对远程主机上的ssh公钥进行批量分发的更多相关文章

  1. 在GitHub多个帐号上添加SSH公钥

    GitHub后台可以添加多个SSH Keys,但是同一个SSH Keys只能在添加在一个帐号上(添加时提示“Key is already in use”).理由很容易想到,SSH公钥使用时相当于用户名 ...

  2. git 在windows上 生成ssh公钥

    今天上传代码到服务器时,报如下错误:   上网搜了一下,应该是ssh过期了.我们就来生成新的ssh公钥吧.   1. 打开git bash   2. 输入命令:  ssh-keygen -t rsa ...

  3. 如何在GitHub上生成ssh公钥并用NetBeans克隆项目

    一.生成ssh公钥. 1.首先判断本机是否创建了公有密钥: $ ls ~/.ssh 这个命令用于检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,下面步骤可省略 ...

  4. (转)在GitHub多个帐号上添加SSH公钥

    GitHub后台可以添加多个SSH Keys,但是同一个SSH Keys只能在添加在一个帐号上(添加时提示“Key is already in use”).理由很容易想到,SSH公钥使用时相当于用户名 ...

  5. shell编程-ssh免交互批量分发公钥脚本

    脚本基本原理 1.控制端免交互创建秘钥和公钥: 1 ssh-keygen -t rsa -f /root/.ssh/id_rsa -N "" 2.免交互发送公钥 1 sshpass ...

  6. 使用scp上传ssh公钥到服务器

    $ scp ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx:.ssh/id_rsa.pub $ ssh root@xxx.xxx.xxx.xxx $ cat ~/.ssh ...

  7. 如何通过SSH及其Client 批量分发文件和执行管理命令

    一.前提:已经配置好root和hadoop用户的无密码的SSH访问 二.直接上代码 ##复制单个文件[hadoop@nn1 hadoop]$ for ip in 102 103 104 111 112 ...

  8. Git: 生成ssh公钥

    生成 SSH 公钥 大多数 Git 服务器都会选择使用 SSH 公钥来进行授权.系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个.生成公钥的过程在所有操作系统上都差不多. 首先先确认一 ...

  9. 配置SSH公钥以及创建远程仓库

    一.配置SSH公钥 1.生成SSH公钥 在我们自己电脑的桌面上右键菜单,打开git命令行,输入以下命令: ssh-keygen -t rsa 一直敲回车之后,显示以下信息即表示成功生成SSH公钥,并且 ...

随机推荐

  1. LZMA C# SDK 结合 UPK 打包压缩 多目录 Unity3d实例

    上篇  LZMA C# SDK 子线程压缩与解压缩 Unity3d实例  讲了怎样使用 LZMA C# SDK 来对文件进行压缩与解压,当中提到 对于多目录能够先打包成 UPK 然后再 LZMA 压缩 ...

  2. MYiSAM和InnoDB引擎区别(mysql)

    MyISAM 1.读取速度快. 2.※更新时锁整个表. 3.占用资源少. 4.适合读多写少的业务. 5.※不支持事务.   InnoDB 1.读取速度一般. 2.※更新时锁当前行. 3.占用资源高. ...

  3. Python 学习资料分享

    有同学需要学习 Python,确实,随着人工智能被炒的火热,再加上大数据时代,作为程序员的我们,怎么可能坐得住,必须尝尝鲜,给自己增加一项技能,增加自己的竞争了. 内容定位 这方面的学习资料比较多,本 ...

  4. Freemarker 中的哈希表(Map)和序列(List)

    freemarlker中的容器类型有: 哈希表:是实现了TemplateHashModel或者TemplateHashModelEx接口的java对象,经常使用的实现类是SimpleHash,该类实现 ...

  5. 逼近法(例 poj3208、poj1037)

    ​ 逼近法是一种很奇妙的算法,以为"逼近"这一种思想在很多的算法中都有体现.诸如:像我们的二分答案,不断地排除决策集合的一半以接近我们的最终答案:我们的树上倍增求 \(LCA\) ...

  6. bashdb bashdebug

    sudo  apt-get install bashdb bashdb  --debug 一.列出代码和查询代码类: l 列出当前行以下的10行 - 列出正在执行的代码行的前面10行 . 回到正在执行 ...

  7. 新建web项目时css注意事项

    初始化css ,如设置body的margin,padding值,button:hover的pointer手型,li dd的list-style,a的下划线等. 最好将常用的初始化css文件整合在一起, ...

  8. Linux时间子系统之二:表示时间的单位和结构【转】

    本文转载自:http://blog.csdn.net/droidphone/article/details/7979295 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] ...

  9. POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP

    题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65 ...

  10. oracle 删除用户命令和部分表空间操作

    删除用户 drop user user_name cascade; 建立表空间 CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01. ...