用ansible编辑当前用户的shell

gwo2fgha  于 2023-10-23  发布在  Shell
关注(0)|答案(4)|浏览(128)

我正在尝试将我的点文件和一些个人配置文件推送到服务器(我不是root或sudoer)。Ansible以我的用户身份连接,以便编辑我的主文件夹中的文件。
我想将我的默认shell设置为usr/bin/fish。我不允许编辑/etc/passwd,所以

user:
  name: shaka
  shell: /usr/bin/fish

不会跑的。
我还检查了chsh命令,但可执行程序提示我的密码。
我怎么能在这样的机器上换壳呢?(Debian 8,Ubuntu 16,Opensuse)

nfs0ujit

nfs0ujit1#

我知道这是旧的,但我想张贴这一点的情况下,其他人回来这里寻找建议像我一样:
如果您正在运行本地playbook,则可能没有指定用户,并期望更改运行playbook的用户的shell。
问题是,如果不提升特权(become: yes),您就不能更改shell,但是当您这样做时-您是以root身份运行的。这只会改变root用户的shell。您可以通过查看/etc/passwd并查看根shell是什么来仔细检查是否是这种情况。
下面是我改变运行playbook的用户的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

这将把变量the_user设置为当前运行的用户,但会使用root更改该用户的shell。

sulc1iza

sulc1iza2#

最后我使用了两个Ansible模块:

  • 安塞布尔期望
  • 可接受提示

首先,我记录了我的密码,并提示:

vars_prompt:
  - name: "my_password"
    prompt: "Enter password"
    private: yes

然后我使用模块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"

creates设置一个锁定文件,避免再次触发此任务。这可能是危险的,因为shell可能会在之后被更改,而ansible不会更新它(因为锁仍然存在)。你可能想避免这种行为。

mzsu5hc0

mzsu5hc03#

我是这样做的:

- 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
uubf1zoe

uubf1zoe4#

Ubuntu 16

~/.bashrc中添加第一行
/usr/bin/fish && exit

相关问题