使用 "become: true" 更改默认 shell 且 Ansible 不起作用
Using "become: true" to change default shell with Ansible not working
使用 become
更改用户的默认值 shell 未给出预期结果。使用:
- name: Change default shell to zsh
shell: sudo chsh -s $(which zsh) $(whoami)
/etc/passwd
看起来像:
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/usr/bin/zsh
这是预期的结果,即将 ubuntu
用户的默认 shell 更改为 zsh
。现在,我宁愿使用 become
:
- name: Change default shell to zsh
become: true
shell: chsh -s $(which zsh)
但是 /etc/passwd
看起来像:
root:x:0:0:root:/root:/usr/bin/zsh
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
请注意,zsh
仅为 root
设置。
我在这里错过了什么? become: true
加shell: chsh -s $(which zsh)
不等于sudo chsh -s $(which zsh) $(whoami)
或sudo chsh -s $(which zsh)
吗?
如果我添加 $(whoami)
比如:
- name: Change default shell to zsh
become: true
shell: chsh -s $(which zsh) $(whoami)
我得到相同的结果,root
与 zsh
但不是我想要更改的用户。
这有效:
- name: Register current user (workaround to change default shell)
shell: whoami
register: current_user
- name: Change default shell to zsh
become: true
shell: "chsh -s $(which zsh) {{ current_user.stdout }}"
有关详细信息,请参阅上面的评论。简而言之,我必须先 运行 whoami
以便在 运行 宁 chsh
.
时使用正确的用户
我会使用这样的东西:
- name: Ensure the user 'ubuntu' has a zsh shell.
user:
name: ubuntu
shell: /bin/zsh
state: present
become: yes
使用 become
更改用户的默认值 shell 未给出预期结果。使用:
- name: Change default shell to zsh
shell: sudo chsh -s $(which zsh) $(whoami)
/etc/passwd
看起来像:
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/usr/bin/zsh
这是预期的结果,即将 ubuntu
用户的默认 shell 更改为 zsh
。现在,我宁愿使用 become
:
- name: Change default shell to zsh
become: true
shell: chsh -s $(which zsh)
但是 /etc/passwd
看起来像:
root:x:0:0:root:/root:/usr/bin/zsh
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
请注意,zsh
仅为 root
设置。
我在这里错过了什么? become: true
加shell: chsh -s $(which zsh)
不等于sudo chsh -s $(which zsh) $(whoami)
或sudo chsh -s $(which zsh)
吗?
如果我添加 $(whoami)
比如:
- name: Change default shell to zsh
become: true
shell: chsh -s $(which zsh) $(whoami)
我得到相同的结果,root
与 zsh
但不是我想要更改的用户。
这有效:
- name: Register current user (workaround to change default shell)
shell: whoami
register: current_user
- name: Change default shell to zsh
become: true
shell: "chsh -s $(which zsh) {{ current_user.stdout }}"
有关详细信息,请参阅上面的评论。简而言之,我必须先 运行 whoami
以便在 运行 宁 chsh
.
我会使用这样的东西:
- name: Ensure the user 'ubuntu' has a zsh shell.
user:
name: ubuntu
shell: /bin/zsh
state: present
become: yes