使用ansible

时间:2017-04-22 14:56:25

标签: linux bash shell ansible sysadmin

我正在尝试将我的点文件和一些个人配置文件推送到服务器(我不是root或sudoer)。 Ansible连接为我的用户,以便编辑我的主文件夹中的文件。

我想将默认shell设置为usr/bin/fish。 我不能编辑/etc/passwd所以

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

不会运行。

我还检查了chsh命令,但检查了我的密码的可执行提示。

我怎样才能在这些机器上更改我的shell? (Debian 8,Ubuntu 16,Opensuse)

3 个答案:

答案 0 :(得分:6)

我知道这很旧,但是我想将其发布,以防其他人像我一样回到这里寻求建议:

如果您正在运行本地剧本,则可能未指定用户,而期望将运行剧本的用户的外壳更改为。

问题在于,您不能在不提升特权(become: yes)的情况下更改外壳程序,但是这样做时-您是以root身份运行事物的。只是改变了root用户的外壳。您可以通过查看/ etc / passwd并查看根外壳是什么来再次检查是否存在这种情况。

这是我更改运行剧本的用户的外壳的秘诀:

- 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更改该用户的外壳。

答案 1 :(得分:1)

我最终使用了两个ansible模块:

  • ansible expect
  • ansible prompt

首先我用提示录制我的密码:

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不会更新它(因为锁仍然存在)。您可能希望避免此行为。

答案 2 :(得分:-2)

Ubuntu 16

~/.bashrc

中添加第一行

/usr/bin/fish && exit