如何在GitLab中仅加密Ansible主机文件的ansible_ssh_password并传值
仅加密Ansible主机文件中的密码值并在GitLab中使用
一、加密单个密码值(替代整个文件加密)
你可以用Ansible Vault的encrypt_string命令单独加密ansible_ssh_password的明文值,再把加密内容直接写入主机文件:
- 执行以下命令生成加密密码串(替换
san123为你的实际密码):
ansible-vault encrypt_string 'san123' --name 'ansible_ssh_password'
- 命令会输出类似下方的加密块,复制这段内容:
ansible_ssh_password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313038363432373635393831343938343736363835333332393634373238363633373334343932 3132343836373436303736333734353738353631333934350a3832353331373032323837343635 3735383539303732353331373236383139373837343332323133303137393932323835383737 3034333835333939340a30333438353738303831373937323133323933383133303637353834 3038313633323736393335393234313638303233333533363534383034363636333736363533
- 替换主机文件里
ansible_ssh_password="{{ ssh_pass }}"这一行,最终主机文件内容如下:
[aix] tusk12 raid12 [aix:vars] ansible_ssh_user=San ansible_ssh_password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313038363432373635393831343938343736363835333332393634373238363633373334343932 3132343836373436303736333734353738353631333934350a3832353331373032323837343635 3735383539303732353331373236383139373837343332323133303137393932323835383737 3034333835333939340a30333438353738303831373937323133323933383133303637353834 3038313633323736393335393234313638303233333533363534383034363636333736363533 ansible_connection=ssh
二、在GitLab中配置并使用加密密码
1. 存储Vault密码到GitLab CI/CD变量
- 进入GitLab项目,依次点击Settings > CI/CD > Variables
- 点击Add variable,设置:
- Key:
ANSIBLE_VAULT_PASSWORD - Value:你加密密码时用的Vault密码
- 勾选Mask variable(防止日志泄露明文),如需限制分支访问可勾选Protect variable
- Key:
2. 在GitLab CI/CD任务中调用Ansible
在项目的.gitlab-ci.yml中添加任务,有两种方式提供Vault密码:
方式一:使用密码文件(兼容所有Ansible版本)
deploy_to_aix: stage: deploy script: # 将GitLab变量写入临时密码文件 - echo "$ANSIBLE_VAULT_PASSWORD" > .vault_pass # 执行Ansible命令并指定密码文件 - ansible-playbook your_deploy_playbook.yml --vault-password-file .vault_pass # 清理临时文件 - rm .vault_pass
方式二:直接使用环境变量(Ansible 2.4+ 支持)
Ansible会自动读取ANSIBLE_VAULT_PASSWORD环境变量作为Vault密码,无需额外文件:
deploy_to_aix: stage: deploy script: - ansible-playbook your_deploy_playbook.yml
内容的提问来源于stack exchange,提问作者Sanghapal Meshram
相关产品推荐
相关产品推荐

