我想写一个 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