[TOC]
> user 模塊可以幫助我們管理遠程主機上的用戶,比如創建用戶、修改用戶、刪除用戶、為用戶創建密鑰對等操作。
## 1、選項
### name參數:
> 必須參數,用于指定要操作的用戶名稱,可以使用別名 user。
### group參數:
> 此參數用于指定用戶所在的基本組。
### gourps參數:
> 此參數用于指定用戶所在的附加組。注意,如果說用戶已經存在并且已經擁有多個附加組,那么如果想要繼續添加新的附加組,需要結合 append 參數使用,否則在默認情況下,當再次使用 groups 參數設置附加組時,用戶原來的附加組會被覆蓋。
### append參數:
> 如果用戶原本就存在多個附加組,那么當使用 groups 參數設置附加組時,當前設置**會覆蓋原來的附加組設置**,如果不想覆蓋原來的附加組設置,需要結合 append 參數,將 append 設置為 yes,表示追加附加組到現有的附加組設置,append 默認值為 no。
### shell參數:
> 此參數用于指定用戶的默認 shell。
### uid參數:
> 此參數用于指定用戶的 uid 號。
### expires參數:
> 此參數用于指定用戶的過期時間,相當于設置 /etc/shadow 文件中的的第8列。
> 比如,你想要設置用戶的過期日期為2018年12月31日,那么你首先要獲取到2018年12月31日的 unix 時間戳,使用命令 “date -d 2018-12-31 +%s” 獲取到的時間戳為1546185600,所以,當設置 expires=1546185600 時,表示用戶的過期時間為2018年12月31日0點0分,設置成功后,查看遠程主機的 /etc/shadow 文件,對應用戶的第8八列的值將變成17895(表示1970年1月1日到2018年12月31日的天數,unix 時間戳的值會自動轉換為天數,我們不用手動的進行換算),目前此參數只支持在 Linux 和 FreeBSD 系統中使用。
### comment參數:
> 此參數用于指定用戶的注釋信息。
### state參數:、
> 此參數用于指定用戶是否存在于遠程主機中
可選值有 present、absent,默認值為 present,表示用戶需要存在,當設置為 absent 時表示刪除用戶。
### remove參數:
> 當 state 的值設置為 absent 時,表示要刪除遠程主機中的用戶。
> **但是在刪除用戶時,不會刪除用戶的家目錄等信息**,這是因為 remove 參數的默認值為 no,如果設置為yes,在刪除用戶的同時,會刪除用戶的家目錄。當 state=absent 并且 remove=yes 時,相當于執行 “userdel --remove” 命令。
### password參數:
> 此參數用于指定用戶的密碼。但是這個密碼不能是明文的密碼,而是一個對明文密碼”加密后”的字符串,相當于 /etc/shadow 文件中的密碼字段,是一個對明文密碼進行哈希后的字符串,你可以在 python 的命令提示符下輸**入如下命令,生成明文密碼對應的加密字符串。**
> import crypt; crypt.crypt('666666')
> 輸入上述命令后,即可得到明文密碼666666對應的加密字符串。
### update_password參數:
> 此參數有兩個值可選,always 和 on_create,當此參數的值設置為always 時表示,如果 password 參數設置的值與用戶當前的加密過的密碼字符串不一致,則直接更新用戶的密碼,默認值即為 always,但是當此參數設置為 on_create 時,如果 password參數設置的值與用戶當前的加密過的密碼字符串不一致,則不會更新用戶的密碼字符串,保持之前的密碼設定。如果是新創建的用戶,即使此參數設置為 on_create,也會將用戶的密碼設置為 password 參數對應的值。
### generate_ssh_key參數:
> 此參數默認值為 no,如果設置為 yes,表示為對應的用戶生成 ssh 密鑰對,默認在用戶家目錄的 ./ssh 目錄中生成名為 id_rsa 的私鑰和名為 id_rsa.pub 的公鑰,如果同名的密鑰已經存在與對應的目錄中,原同名密鑰并不會被覆蓋(不做任何操作)。
### ssh_key_file參數:
當 generate_ssh_key 參數的值為 yes 時,使用此參數自定義生成 ssh 私鑰的路徑和名稱,對應公鑰會在同路徑下生成,公鑰名以私鑰名開頭,以”.pub”結尾。
### ssh_key_comment參數:
> 當 generate_ssh_key 參數的值為 yes 時,在創建證書時,使用此參數設置公鑰中的注釋信息。但是如果同名的密鑰對已經存在,則并不會修改原來的注釋信息,即不做任何操作。當不指定此參數時,默認的注釋信息為”ansible-generated on 遠程主機的主機名”。
### ssh_key_passphrase參數:
> 當 generate_ssh_key 參數的值為 yes 時,在創建證書時,使用此參數設置私鑰的密碼。但是如果同名的密鑰對已經存在,則并不會修改原來的密碼,即不做任何操作。
### ssh_key_type參數:
> 當 generate_ssh_key 參數的值為 yes 時,在創建證書時,使用此參數設置密鑰對的類型。默認密鑰類型為 rsa,但是如果同名的密鑰對已經存在,并不會對同名密鑰做任何操作。
## 3、實例
1. 在 ansible-demo3 主機上創建名為 ding 的用戶,如果用戶已經存在,則不進行任何操作。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding'
ansible-demo3 | SUCCESS => {
"append": false,
"changed": false,
"comment": "",
"group": 1000,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
2. 在 ansible-demo3 主機上刪除名為 ding 的用戶,但是不會刪除 ding 用戶的家目錄。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding state=absent'
ansible-demo3 | SUCCESS => {
"changed": true,
"force": false,
"name": "ding",
"remove": false,
"state": "absent"
}
```
3. 在 ansible-demo3 主機上刪除名為 ding 的用戶,同時會刪除 ding 用戶的家目錄等信息。如果已經不存在 ding 的用戶,則不做任何操作。
state=absent 刪除用戶
remove=yes 刪除家目錄
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding state=absent remove=yes'
ansible-demo3 | SUCCESS => {
"changed": false,
"name": "ding",
"state": "absent"
}
```
4. 指定 ansible-demo3 主機上的 ding 用戶的主組為 testgroup,testgroup 組需要提前存在,當不使用 group 設置主組時,默認主組與用戶名相同。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a "name=ding group=testgroup"
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "",
"group": 1001,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
5.指定 ansible-demo3 主機上的 ding 用戶的附加組為 testgroup2,testgroup2 組需要提前存在,當不使用 groups 設置附屬組時,默認附加組與用戶名相同。注意,為了保險起見,在不知道用戶原來的附加組設定的情況下,**最好將 append 參數設置為 yes,我們也可以一次性設置多個附加組,附加組之間用逗號隔開,比如groups=ding,testgroup,root 。**
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a "name=ding groups=testgroup2 append=yes"
ansible-demo3 | SUCCESS => {
"append": true,
"changed": true,
"comment": "",
"group": 1001,
"groups": "testgroup2",
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
6. 指定 ansible-demo3 主機上的 ding 用戶的過期時間為2018年12月31日。使用”date -d 2018-12-31 +%s“命令可以獲取到對應日期的 unix 時間戳。
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding expires=1546185600'
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
7. 指定 ansible-demo3 主機上的 ding 用戶的注釋信息。
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding comment="www.ding.com" '
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "www.ding.com",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
8. 將 ansible-demo3 主機上的 ding 用戶的密碼設置為666666。
1)首先生成666666的加密字符串:
```
[root@ansible-manager ~]# python
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt;crypt.crypt('666666')
'$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0'
```
2)使用生成的密碼字符串設置用戶密碼:
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a ' name=ding password="$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0" '
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "www.ding.com",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
9. 為 ansible-demo3 上的 ding 用戶生成 ssh 密鑰對。默認在用戶家目錄的 ./ssh 目錄中生成名為 id_rsa 的私鑰和名為 id_rsa.pub 的公鑰,如果已經存在同名密鑰,并不會覆蓋原來的密鑰,即不做任何操作。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes'
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "www.ding.com",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:frvx+OG3cZvXmICd5VYgOoSpkWEuDpQDwgsxzEzjgAM ansible-generated on ansible-demo3 (RSA)",
"ssh_key_file": "/home/ding/.ssh/id_rsa",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8KGJh5sRo45HFvEPy7QwRTT5k+Rnc8eZWwM1iBCYbvcB6LYevB1yUojxE3ycaOnIy7oCokaPIEEsfGYo/y+Eci2TlXea/WrQs3uz8LRxowFg6ZvKODAdSLX0H6DxLP3nnFoxh2Kd5sfglJmCpefIUxNdLBTEeUBfgPfmuLVIQ/+Q7/7Fnpb8XyRsK3MtP+YAm2cLuGbyXoLjncmRcvIDjyYuFYUUoCMsvs7It7LGE+uux7teacCjHJss6O0/7QcDeCYiOUhMq7YE5OcxdMatVgDPQpGjFfPnMu4UZur3YIYlIT7Zb4u7RJWkPQmARtBqIr0dOks9TcL9U5U3XTJ8P ansible-generated on ansible-demo3",
"state": "present",
"uid": 1000
}
```
10. 為 ansible-demo3 上的 ding 用戶生成 ssh 密鑰對,密鑰對生成在 /opt 目錄下,私鑰名為 id_rsa_ding,公鑰名為 id_rsa_ding.pub。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_file=/opt/id_rsa_ding'
```
11. 為 ansible-demo3 上的 ding 用戶生成 ssh 密鑰對,同時指定公鑰中的注釋信息為 “www.ding.com”,此參數只能在創建密鑰時使用才會生效,并不能操作同名的老密鑰。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_comment="www.ding.com"'
```
12 .為 ansible-demo3 上的 ding 用戶生成 ssh 密鑰對,同時指定私鑰的密碼為123456,此參數只能在創建密鑰時使用才會生效,并不能操作同名的老密鑰。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_passphrase="123456"'
```
13. 為 ansible-demo3 上的 ding 用戶生成 ssh 密鑰對,同時指定密鑰對的類型為 dsa,當不顯式指定密鑰類型時,默認類型為 rsa,此參數只能在創建密鑰時使用才會生效,并不能操作同名的老密鑰。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_type=dsa'
```
- Linux
- 高級
- 殺毒
- 記一次中毒事件
- clamav查毒軟件
- 處理挖礦病毒
- 定時任務
- kill
- chattr文件保護
- 運行級別
- Linux啟動
- 文件加密
- ssh免密登錄
- .ssh
- 問題
- 腳本
- 阿里云域名解析
- yum源
- 時間同步
- keepalived實現高可用
- dos字符與unix字符
- 大文件上傳
- 基礎
- proc目錄
- 設置宋體
- 基礎命令_01
- 基礎命令_02
- SELinux
- 文件描述符
- 基礎命令_03
- awk
- 系統日志
- date命令
- bc命令
- lsof
- vim快捷鍵
- shell
- 循環控制
- expr
- 執行腳本的方式
- declare
- shell腳本
- 控制啟停腳本
- 數值計算
- centos
- 配置網絡
- 環境
- 灰度環境
- ansible
- 模塊
- 語法
- file模塊
- setup模塊
- ping模塊
- copy模塊
- command模塊
- shell模塊
- service模塊
- cron模塊
- yum模塊
- user 模塊
- group模塊
- 指定用戶
- playbook
- 實例
- ansible安裝
- Jenkins
- shell部署
- 導入已有項目的配置
- 執行shell
- tungsten數據同步
- 防火墻
- netfilter