Ansible 如何获取给定用户的授权密钥列表?
我想写一个ansible剧本,我们可以提供一个用户名,ansible将显示该用户的授权密钥。授权密钥的路径是{{user\u home\u dir}}/.ssh/authorized\u keys 我尝试使用shell模块,如下所示: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
---
- 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非常感谢。