Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 如何获取给定用户的授权密钥列表?_Ansible_Ansible 2.x_Authorized Keys - Fatal编程技术网

Ansible 如何获取给定用户的授权密钥列表?

Ansible 如何获取给定用户的授权密钥列表?,ansible,ansible-2.x,authorized-keys,Ansible,Ansible 2.x,Authorized Keys,我想写一个ansible剧本,我们可以提供一个用户名,ansible将显示该用户的授权密钥。授权密钥的路径是{{user\u home\u dir}}/.ssh/authorized\u keys 我尝试使用shell模块,如下所示: --- - name: Get authorized_keys shell: cat "{{ user_home_dir }}"/.ssh/authorized_keys register: read_key - name: Prints out au

我想写一个ansible剧本,我们可以提供一个用户名,ansible将显示该用户的授权密钥。授权密钥的路径是{{user\u home\u dir}}/.ssh/authorized\u 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_key中的文件。“ansible”是我用来连接远程机器的用户

下面是vars/main.yml

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

有什么想法吗?仅供参考,我是ansible的新手,已经尝试过了。

在您的vars文件中,您已经

user_home_dir: "{{ lookup('env','HOME') }}"
感谢康斯坦丁指出这一点。。。所有查找都在控制主机上执行。因此,对env HOME的查找将始终解析为用户的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] }}"

下面的工作。我们也需要将变为,否则我们将获得权限拒绝错误

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

错。所有查找都在执行ansible cli的帐户下的控制主机上执行。@KonstantinSuvorov谢谢,我不知道这一点,我将更改答案accordingly@deepak谢谢迪帕克,我会测试的。根据您的回答,“远程用户”应该是我们想要其授权密钥的用户,而不是我们用来控制其他机器的用户,对吗?远程用户是您将连接到远程机器的用户。变量username用于指定您需要授权的用户_keys@deepak非常感谢。