Git 源代码管理中的Ansible SSH私钥?
我开发Ansible playbook已经有几个星期了,因此,我使用这种技术的经验相对较短。我的部分策略包括使用定制的Git 源代码管理中的Ansible SSH私钥?,git,ssh,ansible,ssh-keys,Git,Ssh,Ansible,Ssh Keys,我开发Ansible playbook已经有几个星期了,因此,我使用这种技术的经验相对较短。我的部分策略包括使用定制的ansible\u ssh\u用户在整个资源清册中配置主机,但是,这样的用户将需要自己的ssh密钥对,这将涉及到某种持有/存储其对应私钥的计划。在生产环境中,此playbook将被克隆/拉取,并在某个playbook节点内运行,该节点的作用是提供基础设施的其余部分 起初,我想把这个私钥放在playbook git存储库中,但我还是在重新考虑它,主要是因为有一些明显的安全原因和常识
ansible\u ssh\u用户
在整个资源清册中配置主机,但是,这样的用户将需要自己的ssh密钥对,这将涉及到某种持有/存储其对应私钥的计划。在生产环境中,此playbook将被克隆/拉取,并在某个playbook节点内运行,该节点的作用是提供基础设施的其余部分
起初,我想把这个私钥放在playbook git存储库中,但我还是在重新考虑它,主要是因为有一些明显的安全原因和常识,因此我需要就此事咨询您
有了这一套,以下是后续问题:
- 在基于Ansible的开发环境中,在源代码管理中持有私有SSH密钥是否合理
- 这种做法是否只建议用于开发环境,而playbook节点内的另一个本地git分支将用于保存实际的生产SSH私钥
- 通过Ansible Vault解决这种情况会更好吗?我以前从未使用过这种方法,但尽管如此,我仍然无法判断这是否适合使用它
- 根据您的经验,在生产环境中,您会采取什么方法来解决这个问题?在这个特定场景中,您认为什么是最佳实践
ansible vault
可以对任何文件类型进行操作。只需使用
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
- 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
ansible vault的早期版本仅对var文件中定义的变量进行操作,因此您必须执行以下操作:
ssh_key: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
key_file: /home/user/.ssh/id_rsa
使用ansible vault加密:
ansible-vault encrypt /path/to/var_file
并安装密钥:
- 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
- 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
感谢下面所有通过评论改进答案的人。因为您是从头开始设置的,所以您应该在playbook节点上生成私钥/公钥对,然后通过
授权密钥模块分发公钥。这将消除在任何地方存储机密的需要,除非在需要的主机上。以下是实现此目的的剧本,将在剧本节点上执行:
好的解决方案-任何自动私钥解决方案通常意味着密钥没有密码,您仍然需要手动提供密码以确保ansible vault的安全。如果需要通过中间playbook
节点使用SSH密钥进行身份验证,请仅将SSH密钥保留在主节点上,并使用SSH转发。假设“ansible\u SSH\u user”公钥在远程主机的“~/.SSH/authorized\u key”文件上可用。需要对本地ansible.cfg文件进行哪些更改?是否应将默认远程用户值更新为“ansible\u ssh\u user”?灾难恢复时会发生什么情况?