当前位置: 首页 > 知识库问答 >
问题:

如何为动态清单中的服务器定义专用SSH密钥

凌景辉
2023-03-14

我在为SSH私钥文件编写Ansible playbook时遇到了一个配置问题。在静态Ansible目录中,我可以定义主机服务器、IP地址和相关SSH私钥的组合--但我不知道如何定义那些具有动态目录的组合。

---
- hosts: tag_Name_server1
  gather_facts: no
  roles:
    - role1

- hosts: tag_Name_server2
  gather_facts: no
  roles:
    - roles2
ansible-playbook test.yml -i ec2.py --private-key ~/.ssh/SSHKEY.pem
    null

共有1个答案

潘琨
2023-03-14

TL;DR:在组变量文件中指定密钥文件,因为'tag_name_server1'是一个组。

注意:我假设您使用的是EC2外部库存脚本。如果您正在使用其他动态清单方法,则可能需要对此解决方案进行调整。

这是我几个月来一直在纠结的问题,多亏了布莱恩·科卡的建议,我终于找到了解决方案。诀窍是使用Ansible的组变量机制自动传递您正在使用的机器的正确SSH密钥文件。

my-playbooks
|-- test.yml
+-- group_vars
     |-- tag_Name_server1.yml
     +-- tag_Name_server2.yml

在每个组var文件中,我们可以指定用于连接到组中主机的密钥文件:

# tag_Name_server1.yml
# --------------------
# 
# Variables for EC2 instances named "server1"
---
ansible_ssh_private_key_file: /path/to/ssh/key/server1.pem

现在,当你运行你的playbook时,它应该会自动拾取正确的键!

使用环境变量实现可移植性

# tag_Name_server1.yml
# --------------------
# 
# Variables for EC2 instances named "server1"
---
ansible_ssh_private_key_file: "{{ lookup('env','SSH_KEYDIR') }}/server1.pem"

进一步改进

可能有一系列巧妙的方法可以改善这一点。首先,您仍然需要手动指定为每个组使用哪个键。由于EC2 inventory脚本包括关于每个服务器使用的keypair的详细信息,所以可能有一种方法可以直接从脚本本身获得密钥名称。在这种情况下,您可以提供键所在的目录(如上),并让它根据库存数据选择正确的键。

 类似资料:
  • 我有以下剧本:

  • 我有客户端应用程序,它使用apache-Commons-http客户端2.0,我需要连接到不同的服务器。作为加密协议,我使用: 一般来说,它工作正常,但在某些服务器上会发生以下情况: 如果我从协议列表中删除TLSv1,它将与此服务器一起正常工作,我将获得预期的200状态。因此,我有一个问题——如何预先定义服务器支持哪种协议(SSL或TLS)和协议版本? 或者也许有其他方法来解决这个问题?

  • 我试图编写一个YAML管道脚本,使用ssh密钥将已从bitbucket存储库更改的文件部署到远程服务器。我现在的文档是从bitbucket本身复制的,有错误: 配置错误 bitbucket-pipelines.yml在[pipelines>默认>0>步骤>脚本>1]处出现错误。准确地说:缺少命令字符串或命令字符串为空。此列表中的每个项应该是单个命令字符串或定义管道调用的映射。 我的ssh公钥和私钥

  • 我正在尝试设置一个SpringCloudConfig服务器,该服务器使用ssh私钥的自定义位置。我需要为密钥指定自定义位置的原因是,运行应用程序的用户没有主目录。。所以我没有办法使用默认的我的密钥的目录。我知道可以选择创建一个只读帐户,并在配置中提供用户/密码,但ssh方式更干净 有什么方法可以设置这个吗?

  • 我的团队正在使用Maven进行构建,我得到了一些Jars作为软件正在使用的工具。发送Jars的公司是非Maven商店,所以他们只是发送了原始的. jar文件。在我的本地代码中,我使用这种风格为这些Jars创建了一些Maven依赖项: 在所有的开发中,我们需要加载大约25个这样的定制jar文件。其他开发人员可能没有我这样的文件,这些MVN POM被签入源代码控制,以便在开发之外的其他环境中使用。 有

  • 我试图集成elasticsearch与生产,但得到以下例外。jvm我在两个服务器1.7使用。0_40 2015-01-12 21:29:06调试netty:94-[Whitemane,Aelfyre]已连接到节点[[#transport#-1][inet[/xxx.xxx.xx.xxx:9300]]2015-01-12 21:29:06警告netty:114-[Whitemane,Aelfyre]