0

我想编写一个 ansible playbook,我们可以在其中提供用户名,ansible 将显示该用户的授权密钥。授权密钥的路径是 {{user_home_dir}}/.ssh/authorized_keys。

我尝试使用如下 shell 模块:

---
- name: Get authorized_keys 
  shell: cat "{{ user_home_dir }}"/.ssh/authorized_keys
  register: read_key

- name: Prints out authorized_key 
  debug: var=read_key.stdout_lines

问题是,它会显示 /home/ansible/.ssh/authorized_keys 中的文件。“ansible”是我用来连接远程机器的用户。

下面是 vars/main.yml

---
authorized_user: username
user_home_dir: "{{ lookup('env','HOME') }}"

任何想法?仅供参考,我是 ansible 的新手,并且已经尝试过这个链接

4

2 回答 2

0

下面工作。我们也需要变得如此,否则我们将收到权限被拒绝错误。

---
- hosts: local
  remote_user: ansible
  gather_facts: no
  become: yes
  become_method: sudo

  vars:
    username: myuser

  tasks:

    - name: get user info
      getent:
        split: ":"
        database: passwd
        key: "{{ username }}"

    - name: Get authorized_keys
      shell: cat "{{ getent_passwd[username][4]  }}"/.ssh/authorized_keys
      register: read_key

    - name: Prints out authorized_key
      debug: var=read_key.stdout_lines
于 2017-05-21T07:39:22.813 回答
0

在您的 vars 文件中,您有

user_home_dir: "{{ lookup('env','HOME') }}"

感谢康斯坦丁指出...所有查找都在控制主机上执行。因此,对 env HOME 的查找将始终解析为用户的主目录,从中调用 ansible。

您可以使用 ansible 的 getent 模块来检索用户的信息。下面的代码片段应该会有所帮助

---

- hosts: localhost
  connection: local
  remote_user: myuser
  gather_facts: no

  vars:
    username: myuser

  tasks:

    - name: get user info
      getent:
        database: passwd
        key: "{{ username }}"
      register: info

    - shell: "echo {{ getent_passwd[username][4] }}"
于 2017-05-19T12:32:15.003 回答