使用ansible對遠程主機上的ssh公鑰進行批量分發


使用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 10

傳完之后再次查看遠程主機是否已經有了authorized_key文件:
ansible unknown -a "ls /root/.ssh/"
此時應該可以看到遠程主機應該已經有了authorized_key這個文件。

至此我們的ssh公鑰就分發完畢了。
這里我們再寫幾個其他的例子:

#1.分發當前ssh公鑰並清除之前所有的公鑰:
- name: Set authorized key took from file
  authorized_key:
    exclusive: True                                         #清除遠程主機之前所有的其他公鑰
    key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"    #本機的公鑰地址
    user: root                                              #被控制的遠程服務上的用戶名
    state: present                                          #模式為添加公鑰
#2.刪除遠程主機上指定的當前的ssh公鑰:
- name: Set authorized key took from file
  authorized_key:
    key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"    #本機的公鑰地址
    user: root                                              #被控制的遠程服務上的用戶名
    state: absent                                           #刪除遠程主機上指定的當前ssh公鑰

 

利用hosts變量批量添加主機

配置hosts文件

 

 然后每次就可以連接主機了

由於首次ssh連接的時候需要yes確認,所以需要先連接一次

 

 

原文鏈接:https://www.cnblogs.com/fengjunhua/p/8962767.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM