Ansible版本2.7.9
我正在写一个有趣的剧本,以将一个软件部署到linux环境中。 SSH对这些系统的访问受到CPM(Cyberark)的保护,该CPM被用作SSH密钥管理器。
我已经弄清楚了大多数逻辑,只剩下一个。剧本需要遍历清单组中的主机,在Cyberark中为每个主机查找ssh私钥,然后使用每个密钥将ssh放入清单组中的每个主机以安装软件。我正在努力使该功能无法使用。
我已经阅读了add_host和cyberarkpassword文档,以及大约4个小时的搜索stackoverflow和博客,而且找不到一个与我想做的事相近的例子。 / p>
根据我的想法,应该起作用:
{{ env }}
指定的清单组中的主机。值将通过--extra-args传递。{{ inventory_hostname }}
。pem命名文件。ansible_ssh_common_args: "-o StrictHostKeyChecking=no -i {{ deploy_temp_dir}}/keys/{{ inventory_hostname }}.pem"
但是我不知道如何将loop-lookup-write写到磁盘上。
库存文件样本
[local]
localhost
[local:vars]
ansible_connection=local
[corp:children]
corp-onprem-dev
corp-onprem-stage
corp-onprem-prod
corp-cloud-dev
corp-cloud-stage
corp-cloud-dev
[corp-onprem-dev]
host1
host2
host3
[corp-onprem-stage]
host1
host2
host3
[corp-onprem-prod]
host1
host2
host3
[corp-cloud-dev]
[corp-cloud-stage]
[corp-cloud-prod]
deploy.yml-此代码不起作用,仅是我试图弄清楚的尝试。
- name: retrieve ssh keys for hosts in the specified group, and write them to disk
hosts: local
gather_facts: no
tasks:
- name: lookup ssh private key for each host
debug: msg={{ lookup("cyberarkpassword", cyquery)}}
vars:
cyquery:
appid: 'myapp'
query: 'Safe=mysafe;Folder=Root;Object={{ env[0] }}'
output: 'Password'
loop: groups['{{ env }}']
register: sshkeys
- name: Copy ssh key to disk
copy:
content: "{{ sshkeys }}"
dest: "{{ deploy_temp_dir }}/keys/{{ env[0] }}.pem"
mode: 0600
loop: groups['{{ env }}']
答案 0 :(得分:0)
尚不清楚如何“使用每个(专用)密钥ssh进入每个主机”。
要遍历清单组中的主机,请在Cyberark中为每个主机查找ssh私钥,然后使用每个密钥ssh进入清单组中的每个主机。
假设 localhost (控制器)能够连接主机。
看看变量 sshkeys
的内容- debug:
var: sshkeys
在列表中,您可能会看到要查找的2个项目。 (使代码适合您所得到的。)
sshkeys.results[].item ...... inventory_hostname
sshkeys.results[].password ... ssh private key
使用template将密钥存储在文件中。因为该播放是在 localhost delegate_to上进行的,所以该文件将被用于在主机上存储文件。
- template:
src: hostname.pem.j2
dest: "{{ deploy_temp_dir }}/keys/{{ item.item }}.pem"
loop: "{{ sshkeys.results }}"
delegate_to: "{{ item.item }}"
。
$ cat hostname.pem.j2
{{ item.password }}
(未经测试。我没有CyberArk。在磁盘文件中存储密码可能违反安全标准。)