在ansible playbook中创建用户密码
User password creation in ansible playbook
我想创建一个用户并为其设置密码。
用户模块中的第一个密码行和第二个密码行不起作用。试图通过散列变量传递它,但没有成功:)
如果我运行
并将值放入密码行 - 它工作得很好,但我仍然想使用我的密码变量。你能告诉我如何将它的值发送到这个命令吗?
"password | password_hash('sha512', 'mysecretsalt') }}"
.
---
- name: create ssh keys and distribute ssh public key for user
hosts: clients
become: yes
vars:
uname : Jim
create_user : False
password : imuser
tasks:
- name: creating password
set_fact:
hash : "{{ 'password' | password_hash('sha512', 'mysecretsalt') }}"
- debug:
msg : "hashed password is {{ hash }}"
- name: create user if necessary
user:
name: "{{ uname }}"
state: present
password : "password | password_hash('sha512', 'mysecretsalt') }}"
# password : "{{ hash }}"
# password: $mysecretsalt$ZfUPIwkf1o9u8P04aJuQCgMfSZoIAeCoZpkbNKKn7LtiI.nQl8UWRIhO.rStaZzM8u0Bja3/9bzgOjagM5whY.
shell : /bin/bash
when: create_user == "True"
- name: get etc/passwd
shell: cat /etc/passwd
register: passwd
- block:
- debug:
var: passwd.stdout
- debug:
var: uname
when: inventory_hostname == "ansible_client1"
- name: create ssh key for user
user:
name: "{{ uname }}"
generate_ssh_key : yes
ssh_key_file : '{{ uname }}_id_rsa'
when: '"uname" in passwd.stdout'
register: create_key
- debug:
var: create_key
第二个问题是:
在我用 userdel 删除了用户并用 rm -rf 删除了他的 homedir 之后,ansible_client1 每个 运行 都跳过了任务“为用户创建 ssh 密钥”,因为一开始看起来很奇怪运行 剧本。它在第二台主机上完美运行。
如果我检查 /etc/passwd - 两个服务器都存在用户:
[admin@ansible_client1 ~]$ cat /etc/passwd | grep Jim
Jim:x:1004:1005::/home/Jim:/bin/bash
[admin@ansible_client2 Jim]$ cat /etc/passwd | grep Jim
Jim:x:1007:1008::/home/Jim:/bin/bash
每次都在 ansible_client1 上创建用户并且 homedir 在那里,仍然正在跳过任务,并且似乎无法在 passwd.stdout 中以某种方式找到 uname。
所以...我想知道这里发生了什么
在你的第二个任务中 "password | password_hash('sha512', 'mysecretsalt') }}"
必须 "{{ password | password_hash('sha512', 'mysecretsalt') }}"
使用 te var password
或 "{{ 'password' | password_hash('sha512', 'mysecretsalt') }}"
使用单词 password
作为密码。
我想创建一个用户并为其设置密码。 用户模块中的第一个密码行和第二个密码行不起作用。试图通过散列变量传递它,但没有成功:)
如果我运行
并将值放入密码行 - 它工作得很好,但我仍然想使用我的密码变量。你能告诉我如何将它的值发送到这个命令吗?
"password | password_hash('sha512', 'mysecretsalt') }}"
.
---
- name: create ssh keys and distribute ssh public key for user
hosts: clients
become: yes
vars:
uname : Jim
create_user : False
password : imuser
tasks:
- name: creating password
set_fact:
hash : "{{ 'password' | password_hash('sha512', 'mysecretsalt') }}"
- debug:
msg : "hashed password is {{ hash }}"
- name: create user if necessary
user:
name: "{{ uname }}"
state: present
password : "password | password_hash('sha512', 'mysecretsalt') }}"
# password : "{{ hash }}"
# password: $mysecretsalt$ZfUPIwkf1o9u8P04aJuQCgMfSZoIAeCoZpkbNKKn7LtiI.nQl8UWRIhO.rStaZzM8u0Bja3/9bzgOjagM5whY.
shell : /bin/bash
when: create_user == "True"
- name: get etc/passwd
shell: cat /etc/passwd
register: passwd
- block:
- debug:
var: passwd.stdout
- debug:
var: uname
when: inventory_hostname == "ansible_client1"
- name: create ssh key for user
user:
name: "{{ uname }}"
generate_ssh_key : yes
ssh_key_file : '{{ uname }}_id_rsa'
when: '"uname" in passwd.stdout'
register: create_key
- debug:
var: create_key
第二个问题是:
在我用 userdel 删除了用户并用 rm -rf 删除了他的 homedir 之后,ansible_client1 每个 运行 都跳过了任务“为用户创建 ssh 密钥”,因为一开始看起来很奇怪运行 剧本。它在第二台主机上完美运行。 如果我检查 /etc/passwd - 两个服务器都存在用户:
[admin@ansible_client1 ~]$ cat /etc/passwd | grep Jim
Jim:x:1004:1005::/home/Jim:/bin/bash
[admin@ansible_client2 Jim]$ cat /etc/passwd | grep Jim
Jim:x:1007:1008::/home/Jim:/bin/bash
每次都在 ansible_client1 上创建用户并且 homedir 在那里,仍然正在跳过任务,并且似乎无法在 passwd.stdout 中以某种方式找到 uname。
所以...我想知道这里发生了什么
在你的第二个任务中 "password | password_hash('sha512', 'mysecretsalt') }}"
必须 "{{ password | password_hash('sha512', 'mysecretsalt') }}"
使用 te var password
或 "{{ 'password' | password_hash('sha512', 'mysecretsalt') }}"
使用单词 password
作为密码。