使用 Ansible 生成密钥

Posted

技术标签:

【中文标题】使用 Ansible 生成密钥【英文标题】:Key Generation Using Ansible 【发布时间】:2016-12-24 05:58:54 【问题描述】:

我有一个问题,是否可以在不存储本地的情况下创建 SSH 密钥,而不是我可以将其保存为变量。是否有任何选项可以让我在不保存本地的情况下安全地拥有我的密钥。

谢谢

【问题讨论】:

如果你只是把它放在一个变量中,而不是存储,你将如何使用它? 你想完成什么?您是即时生成新密钥,还是只是尝试存储静态密钥?您是否将它们存储在目标机器上? 主要范围是我需要避免在本地存储密钥,而不是我已经使用 ansible 存储在我的任何对象存储中 我正在尝试解决这个问题,因为我正在生成密钥对并将它们存储在数据库或任何其他云存储中。 如果不本地存储是不可能的,我们是否可以使用python中的加密库生成具有特定用户名的sshkey,与ssh相同??? 【参考方案1】:

这有点hacky,但回答了问题:

---
- hosts: localhost
  tasks:
    - expect:
        command: ssh-keygen -b 2048 -t rsa -f /dev/stdout -q
        responses:
            Overwrite: y
            Enter: "\n"
      failed_when: "'BEGIN RSA PRIVATE KEY' not in priv_key_raw.stdout"
      changed_when: false
      register: priv_key_raw

    - set_fact:
        priv_key: " (priv_key_raw.stdout_lines[3:])[:-1] "

    - shell: "/bin/echo -e \" priv_key | join('\\n') \" | ssh-keygen -y -f /dev/stdin"
      register: pub_key_raw
      changed_when: false

    - set_fact:
        pub_key: " pub_key_raw.stdout "

    - debug: var=priv_key
    - debug: var=pub_key

【讨论】:

嘿,谢谢 Suvorov。但是我们是否可以使用 ec2_key 模块生成 pem 文件,并使用 Ansible 中的任何 python 加密库而不是使用 ssh keygen 来提取公共和私有 bu 所需的密钥像“/dev/”这样的文件路径。这样我们就可以安全地处理我们的密钥而无需临时存储。可以吗? @hain 我敢肯定有很多 hacky 方法可以做到这一点,但如果你真的在生产中需要它,你应该编写自己的 ansible 模块并提供一些库帮助,也许(pycryptodome) [github.com/Legrandin/pycryptodome] 再次感谢 Suvorov。所以如果我们在 ansible 中使用 ec2_key 模块意味着它只会给我生成的 pem 文件,这意味着它会给我一个私钥而不是公钥,对吗? @hain 是的,只有私钥。但请记住,ec2_key 不能在本地工作 - 它连接到 AWS EC2 云并在那里生成密钥。 是的,伙计,谢谢,所以我们可以使用任何库生成公钥,我是对的 Suvorov ......这是相关的。

以上是关于使用 Ansible 生成密钥的主要内容,如果未能解决你的问题,请参考以下文章

ssh密钥分发与ansible部署指南

Ansible ssh-key密钥认证配置

ansible安装以及配置

ansible系列(安装和使用)

ansible应用

4Ansible配置和使用