ansible 用戶批量創建與管理
阿新 • • 發佈:2018-01-23
forever 加密算法 .get sca -- 修改密碼 update 機器 http 本文主要總結如何用ansible 進行用戶管理, 主要包括兩個方面:
- 用戶創建,用戶屬性管理,以及批量創建用戶
- 批量解決用戶免密碼登錄遠程被控制機器
以下是實驗使用的 /etc/ansible/hosts 文件
cat /etc/ansible/hosts
[test]
192.168.188.109
[apps]
192.168.188.110
192.168.188.108
192.168.188.109
192.168.188.111
ansible 用戶創建
當然,在 ansible 裏可以用很多方法創建用戶,例如:
ansible test -m shell -a ‘useradd apple‘ 說明: 這個相當在遠程主機中用 shell 命令創建用戶,一般不推薦
其實,ansilbe 提供了一個 user 模塊,用於創建和管理用戶。
ansible 官方的user 模塊的說明文檔。
例如,創建一個有登錄shell 的用戶,用戶名是 apple: ansible test -m user -a ‘name=apple shell=/bin/bash home=/home/apple state=present‘ 說明: name 指定創建的用戶名 shell 指定用戶登錄時獲得的shell home 為用戶創建 HOME 目錄 state 指定是創建還是刪除用戶,當 state=absent 時,為刪除用戶
如果需要在多臺遠程主機中創建用戶
如果需要在多臺遠程主機中創建用戶,只需將所有主機添加到一個主機組,再執行一遍上面的命令就可以了
ansible apps -m user -a ‘name=apple shell=/bin/bash home=/home/apple/ state=present‘
將所有要操作的遠程主機添加到主機組 apps 中。
如何設置用戶密碼
用 ansible 設置用戶的密碼時,由於需要對傳輸的密碼進行加密,所以要在主機安裝python 的passlib 庫。
安裝方法與生成密碼的方法:
1. 安裝 passlib 要求系統 python 版本在2.7以上。 2. 利用 pip 安裝: pip install passlib 3. 生成的經過加密的密碼: 例如,我們想給 apple 設置的密碼是 123456 ,那麽我們在 ansible 命令中,不能直接使用 123456 這樣的明 文傳輸,要對 123456 這個字符串進行加密再在 ansible 命令中使用。 那麽,如何對密碼 123456 進行加密呢? 4. 安裝完 passlib 後,生成加密的密碼: 4.1 python 3.x 版本(sha512 加密算法): [root@centos_7 ~] python -c ‘from passlib.hash import sha512_crypt; import getpass; print (sha512_crypt.encrypt(getpass.getpass()))‘ Password: $6$rounds=656000$3pLHgWNbPxYGlyvP$VsVlECg4v2Gr35XMzWCtLZyPO.l7Fg240/cGZbTI8qDea8fwY3ERSxAompHqQ4bjIlxeLPgWAUj64FMxunOCt. 說明: 在 Password 後輸入我們的密碼"123456",然後再按enter 鍵,就會生成經過加密的密碼了,$6$round....... 這一串字符 4.2 python 3.x 版本(普通加密算法): 其實就是生成的加密密碼短一點: [root@centos_7 ~] python -c ‘import crypt; print (crypt.crypt("123456","apple"))‘ apnK4rIpkaoHo 說明: "pnK4rIpkaoHo" 就是生成的經過加密的密碼 4.3 python 2.x 版本(sha512 加密算法): [root@centos_7 ~] python -c ‘from passlib.hash import sha512_crypt; import getpass; print (sha512_crypt.encrypt(getpass.getpass()))‘ 4.4 python 2.x 版本(普通加密算法): [root@centos_7 ~] python -c ‘import crypt; print (crypt.crypt("123456","apple"))‘ 小結: 看到上面列出的4種加密方式,發現,其實python3.x 和 python2.x 版本的區別不大,只是加密算法是用 sha512 還是用普通算法的區別而已。 5. 用ansible 設置用戶密碼,下面的命令用於修改已經存在的用戶的密碼也是可以的: ansilbe apps -m user -a ‘name=apple shell=/bin/bash password=pnK4rIpkaoHo update_password=always ‘ 這樣,就可以修改密碼了。使用了普通加密的密文密碼。
小結:以上為止,就是批量創建用戶的方法。並且對用戶的密碼設置方法做了重點說明,其他關於用戶的屬性操作,直接參考ansible 官方的user 模塊的說明文檔,更全面。
如何批量解決免密碼登錄遠程主機的問題
在文章的前半部分,已經在多臺遠程主機上創建了相同的賬號了,那麽怎麽解決登錄這些遠程主機時,需要用戶密碼的問題呢?
一般的辦法就是使用公鑰密鑰對驗證的方法。
一般的原理就是在本地主機創建密鑰對(包含公鑰和私鑰),然後將公鑰放到遠程主機,私鑰留著本地。當本地用戶要登錄遠程主機時,使用私鑰登錄,如何私鑰驗證通過了,登錄就成功。
例如,我們前面創建了 apple 用戶,怎麽樣將使得在本地用 apple 用戶登錄遠程的所有主機都不需要輸入密碼驗證呢?解決辦法:
1. 在本地也創建一個 apple 用戶,並創建 /home/apple/.ssh/ 目錄
useradd apple -s /bin/bash -d /home/apple/
創建 .ssh 目錄
mkdir /home/apple/.ssh
修改 .ssh 目錄的權限
chmod 700 /home/apple/.ssh
創建 /home/apple/.ssh/known_hosts 文件
2. 收集所有遠程主機的公鑰,保存在上 /home/apple/.ssh/known_hosts 文件。這一步的作用,是為了在後面第一次ssh 連接時,不需要再輸密碼。
收集所有遠程主機的 公鑰,主要是利用 ssh-keyscan 命令:
ssh-keyscan -f ip.txt >> /home/apple/.ssh/known_hosts # 說明: ip.txt 文件存放所有的遠程主機 ip 地址,一行代表一臺主機。
3.創建公鑰私鑰對:
一般在對應用戶的 /home/apple/.ssh/ 目錄下創建。這也不是強制的,因為在ssh 發起連接時,可以指定使用的私鑰文件。
ssk-keygen -t rsa 一直按回車鍵就可以了。但要註意生成的 id_rsa 和 id_rsa.pub 存放的路徑。
4. 將公鑰推送到所有的遠程主機
我們編寫playbook 文件,利用authorized_key 模塊就可以快速完成:
[root@centos_7 roles] cat ssh-addkey.yml
---
- hosts: apps # 對apps 組裏的所有遠程主機
gather_facts: False
tasks:
- name: install sshkey
authorized_key:
user: apple
key: "{{ lookup(‘file‘, ‘/home/apple/.ssh/id_rsa.pub‘) }}"
state: present
說明: 在前面1,2,3步中,我們已經準備好了公私鑰對了。推送到遠程主機,可以手動推送,或者使用scp 復制到遠程主機。但是利用scp 復制之後,還需要修改遠程主機上的 /home/apple/.ssh/authorize_keys 文件的權限等等。
ansible 的 authorized_key 模塊就自動幫我們做了這些工作。
執行, ansible-playbook ssh-addkye.yml
5. 結果
現在,就已經順利地在所有遠程主機上配置了用戶apple 的免密碼登錄了。
測試:
[root@centos_7 roles] ssh -i /home/apple/.ssh/id_rsa [email protected] # 用 -i 指定私鑰文件
Last login: Mon Jan 22 14:34:45 2018 from 192.168.188.107
查看 ip 地址:
[apple@centos_7_02 ~]$ ip addr
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:2c:a5:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.188.110/24 brd 192.168.188.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe2c:a5a0/64 scope link
valid_lft forever preferred_lft forever
總結
現在,已經對在ansible 中如何創建和管理用戶有了解了。特別是 user 模塊和 authorize_key 模塊,都是很好用的模塊。可以幫我們順利應付日常的需求。
ansible 用戶批量創建與管理