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

Ansible - environment variables in file lookups

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

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

我想要用户变量而不是 my_user。环境变量(即 lookup('env', 'DEPLOY_KEY_PATH') 或实际上任何变量。

可能吗?

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

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

此外,请注意 state=present 可能不是强制性的,但 it is a good practice to keep it.


那么,虽然具体要看你的项目是什么,但我不建议你这样做,原因有以下三个:

  1. 您可能需要添加几个 public 键。
  2. 您可能需要添加 public 个其他用户。
  3. 如果用户在特定环境中启动您的 ansible 剧本,这种行为可能是不受欢迎的或危险的。

这是我建议你做的。

在项目的根目录添加一个 files/sshkeys/my_user.pub 文件,并在该文件中粘贴任何你想要的 public 键。公钥很少更改,因此维护此文件不太可能成为问题。

├── 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') }}"