使用Ansible进行密码加密并进行管理
使用Ansible来对密码进行加密和管理
在Ansible的playbook中,我们经常需要管理sudo或者ssh密码。但是,如果把这些密码以明文的形式提交到git代码库中,会感到非常不好。虽然加密之后可能还是有点不舒服,但可能比明文好一点。我会创建一个yaml文件,按照主机组的方式,把密码写在group_vars目录下,并对该文件进行加密。
运行 Ansible 的环境
ItemValueOSMac OS X 10.9.4Ansible1.5.4
目标主机
ItemValue対象ホスト192.168.240.34OSCentOS 7認証方式パスワード認証sshユーザーansiblesshパスワードpasswordsudoパスワードpassword暗号化パスワードvaultpass
Ansible的文件结构
.
├── hosts
├── group_vars
│ └── servers.yml
├── site.yml
├── roles
│ └── common
│ └── tasks
│ └── main.yml
└── vars
└── main.yml
每个文件的内容
- hosts
[servers]
192.168.240.34
-
- group_vars/servers.yml
hosts内に[]で囲って記述したグループ名.ymlをgroup_varsディレクトリに作成
---
ansible_ssh_user: ansible
ansible_ssh_pass: password
ansible_sudo_pass: password
-
- site.yml
hosts
グループ名を指定
var_files
グローバルスコープの変数を記述したファイルパスを指定
roles
実行するroleを指定
---
- hosts: servers
vars_files:
- vars/main.yml
roles:
- common
- roles/common/tasks/main.yml
- name: Install yum packages
action: yum name={{ item }} state=installed
with_items:
- wget
- tcpdump
- bind-utils
- telnet
- vars/main.yml
---
sudo: yes
加密和解密
对group_vars/servers.yml进行加密,然后执行playbook。
echo vaultpass > ~/.ansible_vault_pass # こいつはgitに格納しない
ansible-vault encrypt group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
# --vault-pass を指定しない場合は、パスワードを聞いてくる
ansible-playbook site.yml -i hosts --vault-pass ~/.ansible_vault_pass
解密 group_vars/servers.yml 文件。
ansible-vault decrypt group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
对group_vars/servers.yml文件进行加密并编辑。
ansible-vault edit group_vars/servers.yml --vault-pass ~/.ansible_vault_pass