我正在尝试将我的点文件和一些个人配置文件推送到服务器(我不是root或sudoer)。 Ansible连接为我的用户,以便编辑我的主文件夹中的文件。
我想将默认shell设置为usr/bin/fish
。
我不能编辑/etc/passwd
所以
user:
name: shaka
shell: /usr/bin/fish
不会运行。
我还检查了chsh
命令,但检查了我的密码的可执行提示。
我怎样才能在这些机器上更改我的shell? (Debian 8,Ubuntu 16,Opensuse)
答案 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模块:
首先我用提示录制我的密码:
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