ris*_*isa 10 ubuntu roles ansible ansible-playbook
我目前正在学习如何使用Ansible.现在,我有一堆服务器,包括新旧服务器,它们有不同的登录名或密码,或者两者兼而有之.所有人都有关键的权限来运行游戏.
这是我开始的.示例主机文件:
# legacy and new have different logins (like root and deploy)
[legacy]
serv1
serv2
[new]
serv3
serv4
# different has a different login and password altogether
[different]
serv5
Run Code Online (Sandbox Code Playgroud)
所以为了简单起见,我最初sudo apt-get update && sudo apt-get upgrade在所有机器上都运行了相同的playbook ,但由于login/passwd不同,我为每个主机创建了多个playbook.但现在我想干掉它,并根据他们的文档查看角色.
现在我有这样的事情.test/roles/common/tasks/main.yml文件:
---
- name: run apt-get update
apt: update_cache=yes
- name: run apt-get upgrade
apt: upgrade=yes
Run Code Online (Sandbox Code Playgroud)
site.yml文件:
- name: apply common configuration to all nodes
hosts: all
roles:
- common
Run Code Online (Sandbox Code Playgroud)
我知道我实际上可以使用ansible_ssh_user=root或...=deploy在我的hosts文件中定义不同的登录.或者把它们放在组变量中.但是我如何处理不同的sudo密码呢?[legacy]是根,所以我不需要sudo,但[new]和[different]需要,并有不同的密码.我该怎么做呢?集团变量?我是否创建了这些:test/group_vars/new/some_file_with_a_passwd.yml和test/group_vars/different/some_other_passwd.yml(忽略安全问题)?
site.yml如何识别存在具有不同密码的主机或某些没有密码的主机?
为清晰起见编辑:我有SSH访问权限,因此在播放期间执行"预先任务"步骤始终有效(我通过密钥访问连接,而不是通过密码连接).我不担心安全性,因为这是下一步.现在,我想让group_vars正确......这是sudo我遇到的问题.例如,serv1 sudo可能是root/password1,serv3 sudo:deploy/password2,serv5:anotherdeploy/password3
通常,在与没有无密码sudo的用户一起运行时,在使用--ask-sudo-password其短或别名后,在Ansible的密码提示后,您可能希望在命令行上传递sudo密码-K.这样做的好处是不会在任何地方记录在你的Ansible代码库中,然后不会在源代码管理中结束.
但是,这是一个单一提示,将应用于所有主机,因此不适合您的用例.
该ansibe_sudo_pass变量可以替代地用于为任何特定主机的用户提供sudo密码.这应仅在需要sudo密码时使用,因此如果您将此变量提供给具有无密码sudo的主机,则应忽略它.
由于您的用户/密码组合似乎完全由组而不是每个主机拆分,因此将凭证放在组变量中是合乎逻辑的.
正如指出的nikobelia你可能要考虑使用加密这样的敏感数据Ansible的保险柜,credstash或别的东西.
好的,你有两个问题:
如何使用不同的SSH密钥连接到不同的主机?
为每组主机创建不同的group_vars文件,并在其中设置凭据.
# group_vars/legacy
---
ansible_ssh_user: myuser
ansible_ssh_key: ~/.ssh/legacy_key.pem
Run Code Online (Sandbox Code Playgroud)
然后Ansible将根据每个主机所在的组应用不同的密钥,这很简单.
如何使用每台主机的不同凭据进行权限提升?
再一次,将它们粘贴到每组主机的不同group_vars文件中:
# group_vars/legacy
---
ansible_become_user: root
ansible_become_pass: "{{ vaulted_legacy_password }}"
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用关键字become: yes升级权限,Ansible将为每个组应用正确的凭据.如果你已经是root用户,become关键字就没有任何效果了.
然后...... {{ vaulted_legacy_password }}在那里看到那个变量?
如果您共享此代码,最佳实践和唯一明智的做法是制作Ansible Vault文件并将密码保存在那里.Ansible Vault密码可保护您的敏感变量,并允许您在运行时对其进行解密.
您可以将整个group_vars/legacy文件保存(如果凭据是其中的唯一信息),也可以创建group_vars/legacy文件夹,其中包含一个纯文本文件和一个加密文件.group_vars子目录中的所有文件都将被采购并应用于具有该文件夹名称的组.
| 归档时间: |
|
| 查看次数: |
9275 次 |
| 最近记录: |