gpt4 book ai didi

ansible - 将 Ansible 保险库用于 Ansible ssh key 文件

转载 作者:行者123 更新时间:2023-12-05 06:27:49 29 4
gpt4 key购买 nike

我使用 Ansible 保险库来存储要安装在远程机器上的 ssh key 文件。但是我很难让 Ansible 使用私钥进行自己的操作。

我可以在 ansible.cfg 中用“private_key_file”指定一个 key 文件。很好,但我真的想在静止时加密该文件。我试着简单地将它制作成一个保险库文件,但它似乎并没有先解密它 - 只是尝试按我猜的那样使用它。

我希望能够在我的 inventory/group_vars/all 中指定一个新变量,例如:

ssh_private_key: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

但是,虽然有“private_key_file”变量,但似乎没有“private_key”(或类似)变量。

这个 ansible 设置,包括 key 文件,将被放入 git 中,多个管理员将拉取它——它真的不应该是明文的。对简单解决方案有什么建议吗?

最佳答案

虽然我看到有一个long-standing request为此,我的理解是 SSH 私钥必须可访问底层 OpenSSH 软件,这增加了复杂性,而复杂性通常不能很好地应对安全性。

我的首选解决方案是:

  • 使用 ssh-keygen 以标准方式生成和存储 SSH key ,并使用强密码对其进行加密。 key 得到妥善保护,它们可以作为您的任何其他保管的 secret 来处理。这也很有用,因为它允许更轻松和更安全的调试,因为您还可以直接将 key 与传统的 ssh -i 一起使用,这是您无法使用保险 key 完成的事情。
  • 在您的 list 中:将两个变量添加到您的主机,比如说 ssh_key_filessh_key_pass,以关联私钥路径及其密码对于他们中的每一个(或每个组等,具体取决于您的设置)。
  • 在您的剧本中:使用 Expect在 playbook 启动时自动将 SSH key 添加到 SSH 代理的模块:
- hosts: all
# Postpone facts gathering until SSH keys have been unlocked
gather_facts: no

pre_tasks:
- name: Unlock SSH key "{{ ssh_key_file }}"
expect:
command: ssh-add "{{ ssh_key_file }}"
responses:
passphrase: "{{ ssh_key_pass }}"
delegate_to: 127.0.0.1
become: no
changed_when: no
no_log: true

- name: Gathering facts
setup:

tasks:
# Do some stuff...
# ...

post_tasks:
# Optional, to remove the keys from the agent at the end:
- name: Lock SSH key "{{ ssh_key_file }}"
command: ssh-add -d "{{ ssh_key_file }}"
delegate_to: 127.0.0.1
become: no
changed_when: no

这样,Ansible 保险库密码将足以解锁 Ansible 履行职责所需的所有资源,同时仍以安全的方式存储您的所有 key 和 secret 。

关于ansible - 将 Ansible 保险库用于 Ansible ssh key 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54991392/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com