在Ansible剧本中,我试图将默认的公共密钥读入变量以供以后使用。
这是我的yml:
- hosts: hostsGroup
become: false
vars:
publicKey: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
该脚本因以下错误而中断:
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"}
确认该文件存在于该位置。
有更好的方法吗?还是我做错了什么?
答案 0 :(得分:1)
就像所有模板一样,这些插件在Ansible上进行评估 控制机器,而不是目标/远程机器上。
您可以使用slurp module来获取远程密钥的内容。
答案 1 :(得分:0)
引用source:
查找发生在本地计算机上,而不是在远程计算机上。
要获取远程文件的内容,可以使用如下任务:
- name: get remote file contents
command: "cat {{ ansbible_env.HOME }}/.ssh/id_rsa.pub"
register: key
然后您可以访问如下内容:
- name: show key contents
debug:
var: key.stdout
但是!请注意,这里我使用的是ansible_env.HOME
。 Ansible在收集事实时会填充此字段,并且从Ansible用来进行身份验证的任何用户的角度来看,它将代表HOME
环境变量的值。如果您使用的是become_user
之类的值,则该值不会更改以反映新用户。
答案 2 :(得分:0)
您提到的变成:错误。这意味着您想强制在/ home /目录中进行ansible_user查找。 但是,剧本正在根位置中查找密钥:无法在查找中找到文件:/root/.ssh/id_rsa.pub
假设您想要获取ansible_user的publick密钥,则您的剧本每次连接到远程服务器时都会升级为root用户+在本地计算机而非远程计算机上进行查找搜索。