ansible模块-用户和组模块
ansible查看帮助方法
# 查看所有模块帮助信息
ansible-doc -l
# 指定查看某个模块参数用法
ansible-doc copy
1.user用户模块
ansible all -m user -a "name=hehe uid=888 group=888 shell=/sbin/nologin create_home=no"
user模块参数
参数 | 说明 |
---|---|
name | 指定要创建的用户名称 |
uid | 指定用户uid |
create_home | 是否创建用户家目录 |
create_home | state |
group | state |
groups | 用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。 |
append | 如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时 ,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no |
shell | 指定用户登陆shell |
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 系统中使用 |
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,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作 |
remove | 当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 "userdel --remove" 命令 |
state | present:默认为present,创建用户 absent:删除用户 |
使用示例
ad-hoc
在命令行中不能使用明文密码,执行后虽然会提示 CHANGED
,但是实际上是不生效的
$ ansible all -m user -a 'name=root password=123'
[WARNING]: The input password appears not to have been hashed. The 'password' argument must be encrypted for this module to work properly.
使用如下方法
# 先在命令行中指定一个变量
password='1'
# 然后再执行即可
ansible 10.0.0.25 -m user -a "name=root update_password=always password=\"{{ \"$password\" | password_hash('sha512') }}\""
playbook
修改多个用户
cat > change_users_pwd.yml << EOF
- hosts: test
gather_facts: false
tasks:
- name: change users password
user:
name: "{{ item.name }}"
password: "{{ item.chpass | password_hash('sha512') }}"
update_password: always
with_items:
- { name: 'root', chpass: '123'}
- { name: 'test', chpass: '456'}
EOF
ansible-playbook change_users_pwd.yml
修改单个用户
cat > change_user_pwd.yml << EOF
- hosts: test
gather_facts: false
tasks:
- name: change user password
user:
name: "{{ name1 }}"
password: "{{ chpass | password_hash('sha512') }}"
update_password: always
EOF
使用 -e
参数传递变量到playbook中
ansible-playbook change_user_pwd.yml -e "name1=root chpass=123"
2.group组模块
ansible all -m group -a "name=hehe gid=888"
group模块参数
参数 | 说明 |
---|---|
name | 要创建的组名称 |
gid | 指定组gid |
state | present:默认为present,创建组 absent:删除组 |