如何解决“无法在查找中找到文件”读取 id_rsa.pub?

Tea*_*oon 4 ansible ansible-2.x

在 Ansible 剧本中,我试图将默认公钥读入一个变量以供以后使用。
这是我的 yml:

- hosts: hostsGroup
  become: false
  vars:
    publicKey: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
Run Code Online (Sandbox Code Playgroud)

该脚本因以下错误而中断:

fatal: [redacted-ip]: FAILED! => 
{"msg": "An unhandled exception occurred while templating '{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}'. Error was a <class 'ansible.errors.AnsibleError'>, 
original message: An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, 
original message: could not locate file in lookup: /root/.ssh/id_rsa.pub"}
Run Code Online (Sandbox Code Playgroud)

该文件被确认存在于该位置。

有没有更好的办法?或者我做错了什么?

lar*_*sks 7

引用文档

查找发生在本地计算机上,而不是在远程计算机上。

要获取远程文件的内容,您可以使用这样的任务:

- name: get remote file contents
  command: "cat {{ ansible_env.HOME }}/.ssh/id_rsa.pub"
  register: key
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样访问内容:

- name: show key contents
  debug:
    var: key.stdout
Run Code Online (Sandbox Code Playgroud)

但!请注意,这里我使用的是ansible_env.HOME. 这在收集事实时由 Ansible 填充,它将HOME从 Ansible 用于身份验证的任何用户的角度表示环境变量的值。如果您使用诸如 之类become_user的东西,则该值不会更改以反映新用户。