Ansible - 在输入特定密码后限制部署(注意:不是SSH密码)

时间:2016-09-12 13:30:55

标签: ssh passwords ansible

Ansible部署到多个服务器:devqauatprod等。为所有环境设置了SSH密钥。

我想在输入特定密码后将部署限制为prod(注意:不是SSH密码)。

如何在prod广告资源上运行时强制执行此操作?

2 个答案:

答案 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