使用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確認,所以需要先連接一次