Ansible SSH私钥在源代码pipe理?

我已经开发了一个Ansible剧本几个星期,因此,我对这种技术的经验相对较短。 我的战略的一部分包括使用自定义的ansible_ssh_user在整个清单中configuration主机,但是,这样的用户将需要自己的SSH密钥对,这将涉及某种计划来保存/存储其对应的私钥。 在生产环境中,这个剧本将被克隆/拉出,并在某个剧本节点内运行, 剧本的作用是提供其余的基础设施。

起初,我只是想把这个私钥放在playbook git仓库里面,但是我还是有一些想法,主要是因为它有一些明显的安全原因和常识,所以我需要向你咨询一下这件事。

有了这个表,下面是后续问题:

  • 在基于Ansible的开发环境中,在源代码控制中保存私有SSH密钥是否合理?
  • 这种做法是否仅仅是针对开发环境而build议的然后playbook节点中的另一个本地git分支将被用来保存实际的生产SSH私钥?
  • 用Ansible Vault解决这个案例会更好吗?我以前从未使用过这个方法,但是不pipe如何,我还不能分辨这是否是使用它的适当情况。
  • 根据你的经验,在生产环境中你会采取什么样的方法呢?在这个特定的情况下,最好的做法是什么?

在修订控制中存储任何种类的明文秘密,包括SSH私钥是一个不好的主意。 相反,使用无保险的保pipe库来存储私钥。

ansible-vault可以在任何文件types上运行。 只需使用encryption文件

 ansible-vault encrypt /path/to/local/private_key 

然后安装密钥:

 - name: Install a private SSH key vars: source_key: /path/to/local/private_key dest_key: /path/to/remote/private_key tasks: - name: Ensure .ssh directory exists. file: dest: "{{ dest_key | dirname }}" mode: 0700 owner: user state: directory - name: Install ssh key copy: src: "{{ source_key }}" dest: "{{ dest_key }}" mode: 0600 owner: user 

较早版本的ansible-vault只能对var文件中定义的variables进行操作,所以你必须这样做:

 ssh_key: | -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----- key_file: /home/user/.ssh/id_rsa 

用anault-vaultencryption:

 ansible-vault encrypt /path/to/var_file 

并安装密钥:

 - name: Ensure .ssh directory exists. file: dest: "{{ key_file | dirname }}" mode: 0700 owner: user state: directory - name: Install ssh key copy: content: "{{ ssh_key }}" dest: "{{ key_file }}" mode: 0600 owner: user 

感谢所有那些通过他们的评论改进了答案的人。

由于您是从头开始供应,您应该在剧本节点生成私钥/公钥对,然后通过authorized_keys模块分发公钥。 这将消除除了在需要的地方的主机之外的任何地方存储秘密的需要。 这是一个实现这个目标的剧本,可以在剧本节点上执行:

 --- - hosts: 127.0.0.1 sudo: yes gather_facts: no tasks: - name: create ansible_ssh_user locally user: name=ansible_ssh_user generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa - name: copy the generated public key to an accessible location for the next play shell: cp ~ansible_ssh_user/.ssh/id_rsa.pub /tmp/ansible_ssh_user.pub - hosts: all sudo: yes gather_facts: no tasks: - name: create ansible_ssh_user user: name=ansible_ssh_user groups=group1,group2 - name: Add RSA public key to the remote host authorized_key: user=ansible_ssh_user key="{{ lookup('file', '/tmp/ansible_ssh_user.pub') }}" - hosts: 127.0.0.1 sudo: yes gather_facts: no tasks: - name: remove public key from /tmp shell: rm /tmp/ansible_ssh_user.pub ...