我目前正在学习如何使用Ansible。现在,我有一堆新旧服务器,它们有不同的登录名或密码,或两者兼而有之。所有人都有关键的权限来运行游戏。
这就是我的开始。示例 hosts 文件:
# 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
所以为了简单起见,我最初在所有机器上都有一个相当于sudo apt-get update && sudo apt-get upgrade
的剧本,但由于登录/密码不同,我为每个主机创建了多个剧本。但现在我想干掉它,并根据他们的文档查看角色。
现在我有这样的事情。 test / roles / common / tasks / main.yml文件:
---
- name: run apt-get update
apt: update_cache=yes
- name: run apt-get upgrade
apt: upgrade=yes
site.yml文件:
- name: apply common configuration to all nodes
hosts: all
roles:
- common
我了解我实际上可以在hosts文件中使用ansible_ssh_user=root
或...=deploy
定义不同的登录名。或者把它们放在组变量中。但是我如何处理不同的sudo密码呢? [legacy]
是root,因此我不需要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
答案 0 :(得分:8)
正常情况下,在使用--ask-sudo-password
或其短别名-K
与不使用&#的用户一起运行后,您希望在Ansible的密码提示后在命令行上传递sudo密码39;没有无密码的sudo。这样做的好处是不会在任何地方记录在你的Ansible代码库中,然后不会在源代码管理中结束。
但是,这是一个提示,将应用于所有主机,因此并不适合您的使用案例。
ansibe_sudo_pass
变量可以替代地用于为任何特定主机的用户提供sudo密码。只有在需要sudo密码时才能使用 ,所以如果你将这个变量提供给没有密码的sudo的主机,那么它应该被忽略。
由于您的用户/密码组合似乎完全由组而不是每个主机拆分,因此将凭据放在group vars中具有逻辑意义。
pointed out作为nikobelia,您可能需要考虑使用Ansible's Vault,credstash或其他内容加密此敏感数据。
答案 1 :(得分:5)
好的,你在这里有两个问题:
如何使用不同的SSH密钥连接到不同的主机?
为每组主机创建不同的group_vars文件,并在其中设置凭据。
# group_vars/legacy
---
ansible_ssh_user: myuser
ansible_ssh_key: ~/.ssh/legacy_key.pem
然后Ansible将根据每个主机所在的组应用不同的密钥,这很简单。
如何为每个主机使用不同的凭据进行权限提升?
再一次,将它们粘贴到每组主机的不同group_vars文件中:
# group_vars/legacy
---
ansible_become_user: root
ansible_become_pass: "{{ vaulted_legacy_password }}"
然后,您可以使用关键字become: yes
升级权限,Ansible将为每个组应用正确的凭据。如果您已经是root用户,则become
关键字不会产生任何影响。
然后......看到那里的{{ vaulted_legacy_password }}
变量?
如果您要共享此代码,那么最佳做法和唯一明智的做法就是制作Ansible Vault文件并将密码保存在那里。 Ansible Vault密码可保护您的敏感变量,并允许您在运行时对其进行解密。
您可以将整个group_vars/legacy
文件保存(如果凭据是其中的唯一信息),也可以创建group_vars / legacy文件夹,其中包含一个纯文本文件和一个加密文件。 group_vars子目录中的所有文件都将被获取并应用于具有该文件夹名称的组。
答案 2 :(得分:-2)
首先,这不是一个可回答的问题。您需要访问密钥才能连接到多个主机。
您可以在遥控器上创建ssh密钥并保存本地所有公钥。
永久添加ssh config;
vim~ / .ssh / config
IdentitiyFile ~/.ssh/pub.key
如果您需要更多关于you can check here
的信息现在您可以访问所有主机无密钥。享受>!