【问题标题】:Using multiple SSH keys for different hosts with Ansible EC2 Inventory Plugin使用 Ansible EC2 Inventory Plugin 为不同主机使用多个 SSH 密钥
【发布时间】:2020-10-14 23:50:17
【问题描述】:

我正在尝试使用 Ansible 在多个现有 AWS EC2 实例上安装应用程序,这些实例在不同的 Linux 操作系统上使用许多不同的 SSH 密钥和用户名。由于现有实例的状态不断变化,我正尝试按照推荐的方式通过 aws_ec2 库存插件使用 Ansible 的动态库存。

我可以按key_name 对主机进行分组,但现在需要根据组使用相关的 SSH 密钥和用户名对此清单运行 Ansible playbook,其结构如下面来自 ansible-inventory -i inventory.aws_ec2.yml --graph 的示例输出:

@all:
  |--@_SSHkey1:
  |  |--hostnameA
  |  |--hostnameB
  |--@_SSHkey2:
  |  |--hostnameC
  |--@_SSHkey3:
  |  |--hostnameD
  |  |--hostnameE
  |  |--hostnameF
  |--@aws_ec2:
  |  |--hostnameA
  |  |--hostnameB
  |  |--hostnameC
  |  |--hostnameD
  |  |--hostnameE
  |  |--hostnameF
  |--@ungrouped:

我已尝试使用上面列出的组创建单独的主机文件(如下所示),提供相关 SSH 密钥的路径,但我不确定您将如何将其与动态清单一起使用。

[SSHkey1]
ansible_user=ec2-user
ansible_ssh_private_key_file=/path/to/SSHkey1

[SSHkey2]
ansible_user=ubuntu
ansible_ssh_private_key_file=/path/to/SSHkey2

[SSHkey3]
ansible_user=ec2-user
ansible_ssh_private_key_file=/path/to/SSHkey3

这在 Ansible 官方文档 herehere 中没有解释,但应该是一个常见的用例。我发现的许多文档都提到了使用 Python 脚本 (ec2.py) 使用动态库存的旧方法,该方法已被弃用,因此不再相关(例如 this AWS post)。 我发现了一个类似的未回答的问题here (Part 3)

任何指向示例、文档或解释的链接都将不胜感激,因为这似乎是一种创建动态清单的相对较新的方式,我发现很难找到清晰、详细的文档。


编辑

在 cmets 中使用 @larsks 建议的 group variables 有效。最初是因为从清单插件返回的 SSH 密钥名称前面带有下划线,因此组名称需要采用 _SSHkey 的形式。

【问题讨论】:

  • 我怀疑你可以简单地使用group variables来解决这个问题。
  • 我认为你的想法是对的。只需确保您的动态清单将主机放入适当的组中即可。
  • @larsks 组变量解决了我在原始帖子中添加的一个小问题。如果您将评论添加为答案,那么我会接受。

标签: amazon-web-services amazon-ec2 ssh ansible ansible-inventory


【解决方案1】:

答案是按照 cmets 中的建议使用 group variables。从清单插件返回的 SSH 密钥名称前加下划线,因此组名的格式必须为 _SSHkey

【讨论】:

    【解决方案2】:

    您是否考虑过使用 ssh 配置文件? ~/.ssh/配置。您可以将特定的主机连接信息放在那里。主机、主机名、用户、身份文件是你需要的四个选项

    主机 ec1 主机名 10.10.10.10 用户 ubuntu 身份文件 ~/.ssh/ec1-ubuntu.rsa

    然后,当您 ssh 到 'ec1' 时,ssh 将使用指定的 rsa 密钥作为用户 ubuntu 连接到主机 10.10.10.10。 “Ec1”可以是您喜欢的任何名称,不必是实际主机名、ip 或 FQDN。使其与您的库存名称相匹配。

    警告:: 为目录 ~/.ssh 设置某些文件权限,其中的文件都是 0600 (chmod -R 0600 ~/.ssh),并且所有者是正确的,否则 ssh 会适合你。在 ubuntu 上,/var/log/auth.log 将有助于故障排除。

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 2020-04-10
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      相关资源
      最近更新 更多