Ansible:如何使用不同密码的主机运行游戏?

时间:2015-10-15 18:03:10

标签: ubuntu ansible roles ansible-playbook

我目前正在学习如何使用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

3 个答案:

答案 0 :(得分:8)

正常情况下,在使用--ask-sudo-password或其短别名-K与不使用&#的用户一起运行后,您希望在Ansible的密码提示后在命令行上传递sudo密码39;没有无密码的sudo。这样做的好处是不会在任何地方记录在你的Ansible代码库中,然后不会在源代码管理中结束。

但是,这是一个提示,将应用于所有主机,因此并不适合您的使用案例。

ansibe_sudo_pass变量可以替代地用于为任何特定主机的用户提供sudo密码。只有在需要sudo密码时才能使用 ,所以如果你将这个变量提供给没有密码的sudo的主机,那么它应该被忽略。

由于您的用户/密码组合似乎完全由组而不是每个主机拆分,因此将凭据放在group vars中具有逻辑意义。

pointed out作为nikobelia,您可能需要考虑使用Ansible's Vaultcredstash或其他内容加密此敏感数据。

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

的信息

现在您可以访问所有主机无密钥。享受>!