Ansible部署到多个服务器:dev
,qa
,uat
,prod
等。为所有环境设置了SSH密钥。
我想在输入特定密码后将部署限制为prod
(注意:不是SSH密码)。
如何在prod
广告资源上运行时强制执行此操作?
答案 0 :(得分:0)
为了防止意外部署,您可以使用额外的变量或环境变量(将其添加为您的第一个任务):
---
- hosts: localhost
gather_facts: no
tasks:
- assert:
that: "'prod' not in group_names or ('prod' in group_names and (allow_prod_deploy | default(false) or lookup('env', 'ALLOW_PROD_DEPLOY') | default(false)))"
msg: "Trying to deploy to production, but allow_prod_deploy is not set!"
按如下方式执行prod deploy:
ansible-playbook -e allow_prod_deploy=1 myplaybook.yml
or
ALLOW_PROD_DEPLOY=1 ansible-playbook myplaybook.yml
答案 1 :(得分:0)
最简单的方法是实际使用SSH密码,但同时在生产服务器上设置要求,提供密码和Ansible用户的密钥。
将以下内容添加到sshd_config
的末尾并重新启动SSH守护程序:
Match User ansible
PasswordAuthentication yes
AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"
(当然,将ansible
替换为实际帐户名称)
这样你就不会破坏安全性:
ansible
用户必须同时使用:密码(您需要将-k
添加到生产服务器的Ansible调用中)和基于密钥的身份验证PasswordAuthentication no
的常规部分中有sshd_config
)