Ansible - 文件查找中的环境变量

时间:2015-06-25 00:31:36

标签: ansible ansible-playbook

我有一个ansible任务,将密钥从本地用户复制到远程机器:

authorized_key: user=deployer key="{{ lookup('file', '/home/my_user/.ssh/id_rsa.pub') }}"

我想使用变量而不是 my_user 。 Enviernoment vairble(即lookup('env', 'DEPLOY_KEY_PATH')或实际上任何变量。

有可能吗?

1 个答案:

答案 0 :(得分:3)

要获取当前用户密钥,您当然可以使用~别名。这将有效:

authorized_key: state=present user=deployer key="{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

另请注意,state=present可能不是强制性的,而是it is a good practice to keep it

然后,虽然这完全取决于你的项目是什么,但我不建议你这样做有三个原因:

  1. 您可能需要添加几个公钥。
  2. 您可能需要添加其他用户的公开信息。
  3. 如果用户在特定环境中启动您的ansible playbook,则此行为可能是不必要的或危险的。
  4. 我建议你这样做。

    在项目的根目录中添加files/sshkeys/my_user.pub文件,并将所需的所有公钥粘贴到此文件中。 Pubkeys很少更改,因此维护此文件不太可能存在问题。

    ├── files
    │   └── sshkeys
    │       └──my_user.pub
    ├── hosts
    └── site.yml
    

    您可以使用authorized_key模块查找密钥文件:

    authorized_key: state=present user=deployer key="{{ lookup('file', './files/sshkeys/my_user.pub') }}"
    

    或者,正如您所问,您是否使用变量:

    authorized_key: state=present user=deployer key="{{ lookup('file', './files/sshkeys/'+ user.name +'.pub') }}"
    
相关问题