Ale*_*eri 51 git ssh ssh-keys ansible
我已经开发了几周的Ansible剧本,因此,我对这种技术的经验相对较短.我的部分策略包括ansible_ssh_user在整个清单中使用自定义配置主机,但是,这样的用户将需要自己的SSH密钥对,这将涉及某种用于保存/存储其对应私钥的计划.在生产环境中,该克隆/拉取该剧本并在某个剧本节点内运行,该节点的作用是配置其余的基础设施.
起初,我想把这个私钥放在playbook git存储库中,但我对它有了第二个想法,主要是因为它有一些明显的安全原因和常识,所以我需要咨询你的原因这件事.
有了这个设置,这里是后续问题:
Ben*_*ley 66
在修订控制中存储任何类型的明文秘密是一个坏主意,包括SSH私钥.而是使用ansible-vault来存储私钥.
ansible-vault可以对任何文件类型进行操作.只需加密文件即可
ansible-vault encrypt /path/to/local/private_key
Run Code Online (Sandbox Code Playgroud)
然后安装密钥:
- 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
Run Code Online (Sandbox Code Playgroud)
早期版本的ansible-vault只能对var文件中定义的变量进行操作,因此您必须执行以下操作:
ssh_key: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
key_file: /home/user/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
使用ansible-vault加密:
ansible-vault encrypt /path/to/var_file
Run Code Online (Sandbox Code Playgroud)
并安装密钥:
- 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
Run Code Online (Sandbox Code Playgroud)
感谢所有下面那些通过他们的评论改进答案的人.
由于您是从头开始配置,因此您应该在playbook节点上生成私钥/公钥对,然后通过该模块分发公钥.除了在需要它的主机上之外,这将消除在任何地方存储秘密的需要.这是一个实现这个目的的剧本,它将在剧本节点上执行: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
...
Run Code Online (Sandbox Code Playgroud)