使用带有Ansible EC2清单插件的不同主机使用多个SSH密钥

问题描述 投票:0回答:1

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

我能够按key_name对主机进行分组,但现在需要根据该组使用相关的SSH密钥和用户名针对此清单运行Ansible剧本,其结构如下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)

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


编辑

使用@larsks在评论中建议的group variables。最初由于清单插件返回的SSH密钥名称前面带有下划线而感到困惑,因此组名称的格式必须为_SSHkey

amazon-web-services amazon-ec2 ssh ansible ansible-inventory
1个回答
0
投票

您是否考虑过使用ssh配置文件? 〜/ .ssh / config。您可以在其中放置特定的主机连接信息。主机,主机名,用户,身份文件是您需要的四个选项

主机ec1主机名10.10.10.10用户ubuntuIdentityFile〜/ .ssh / ec1-ubuntu.rsa

然后,当您将ssh切换到'ec1'时,ssh将以用户ubuntu的身份使用指定的rsa密钥连接到主机10.10.10.10。 'Ec1'可以是您喜欢的任何名称,而不必是实际的主机名或ip或FQDN。使它与您的库存名称匹配。

警告::为目录〜/ .ssh设置一定的文件许可权,并且其中的文件均为0600(chmod -R 0600〜/ .ssh),并且所有者正确无误,或者ssh适合您。在ubuntu上,/var/log/auth.log将有助于进行故障排除。

© www.soinside.com 2019 - 2024. All rights reserved.