如何获取给定用户的authorized_keys列表



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

我尝试使用如下所示的外壳模块:

---
- 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 的新手,并且已经尝试过此链接。

在你的变量文件中,你有

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] }}"

下面工作。我们需要变得太过,否则我们将获得权限被拒绝错误。

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

相关内容

  • 没有找到相关文章

最新更新