hug*_*aka 3 linux sysadmin bash shell ansible
我正在尝试将我的点文件和一些个人配置文件推送到服务器(我不是 root 或 sudoer)。Ansible 以我的用户身份连接,以便编辑我的主文件夹中的文件。
我想将我的默认 shell 设置为usr/bin/fish
. 我不允许编辑/etc/passwd
所以
user:
name: shaka
shell: /usr/bin/fish
Run Code Online (Sandbox Code Playgroud)
不会跑。
我还检查了chsh
命令,但我的密码的可执行提示。
我怎么能在这样的机器上改变我的外壳?(Debian 8、Ubuntu 16、Opensuse)
小智 9
我知道这是旧的,但我想发布这个,以防其他人像我一样回到这里寻求建议:
如果您正在运行本地剧本,您可能不会指定用户并期望更改运行剧本的用户的外壳。
问题是您不能在不提升权限 ( become: yes
) 的情况下更改 shell ,但是当您这样做时 - 您是以 root 身份运行的。这只是改变了 root 用户的 shell。您可以通过查看 /etc/passwd 并查看 root shell 是什么来仔细检查是否是这种情况。
这是我更改运行剧本的用户外壳的秘诀:
- name: set up zsh for user
hosts: localhost
become: no
vars:
the_user: "{{ ansible_user_id }}"
tasks:
- name: change user shell to zsh
become: yes
user:
name: "{{ the_user }}"
shell: /bin/zsh
Run Code Online (Sandbox Code Playgroud)
这会将变量the_user
设置为当前正在运行的用户,但会使用 root 更改该用户的 shell。
我最终使用了两个 ansible 模块:
首先,我根据提示记录我的密码:
vars_prompt:
- name: "my_password"
prompt: "Enter password"
private: yes
Run Code Online (Sandbox Code Playgroud)
然后我使用该模块expect
将密码发送到 chsh 命令:
tasks:
- name: Case insensitve password string match
expect:
command: "chsh -s /usr/bin/fish"
responses:
(?i)password: "{{ my_password }}"
creates: ".shell_is_fish"
Run Code Online (Sandbox Code Playgroud)
设置creates
一个锁定文件以避免再次触发该任务。这可能很危险,因为 shell 可能会在之后更改,而 ansible 不会更新它(因为锁仍然存在)。您可能想避免这种行为。
我是这样做的:
- name: Set login shell of user {{ ansible_env.USER }} to `/bin/zsh` with `usermod`
ansible.builtin.command: usermod --shell /bin/zsh {{ ansible_env.USER }}
become: true
changed_when: false
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7099 次 |
最近记录: |