我一周前就开始使用ansible了,抱歉,如果这是一个简单的问题,我没有这方面的经验。。。
我的问题是,我需要通过使用ansible开发一个软件部署解决方案,其他开发人员将来可以很容易地使用它。在这个解决方案中,需要下载一个git存储库,其中包含一个vagrant文件,然后创建一个安装了ansible的vagrant框,其中ansible被配置为通过使用jumpserver和网关连接到hadoop集群。
为了连接到公司的环境,可以使用ssh密钥或用户/密码(开发人员有自己的开发人员帐户),因此我决定为开发生成ssh密钥,我在ansible中使用以下方法:
库存文件:
[company_jumpserver]
IP.ADDR.OF.COMP ansible_ssh_private_key_file=~/.ssh/id_rsa
[company_gateway]
GW_ALIAS ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_common_args='-o ProxyCommand="ssh -i ~/.ssh/id_rsa -W %h:%p DEV_USER_X@IP.ADDR.OF.COMP"'
[company_hadoop_edgenode]
EDGE_ALIAS ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_common_args='-o ProxyCommand="ssh -i ~/.ssh/id_rsa -o ProxyCommand=\"ssh -i ~/.ssh/id_rsa DEV_USER_X@IP.ADDR.OF.COMP -W GW_ALIAS:22\" DEV_USER_X@GW_ALIAS -W EDGE_ALIAS:22"'
剧本yaml文件:
- name: Reach jumpserver
hosts: company_hadoop_edgenode
remote_user: DEV_USER_X
tasks:
- ping:
- command: hostname
register: out
- debug: msg="{{out.stdout_lines}}"
问题:
问题是,我希望安全地存储ssh密钥,不仅对我,而且对任何开发人员都是如此(如果稍后我将他们的ssh密钥添加到ansible配置中,这是可以的)。
由于直接在git存储库中存储ssh密钥不是一种好模式,因此我研究了如何存储加密的密码:https://docs.ansible.com/ansible/2.4/vault.html (在某些情况下,此文档是错误的)
现在我可以将任何ssh密码转换为如下加密格式:
my_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
62313365396662343061393464336163383764373764613633653634306231386433626436623361
6134333665353966363534333632666535333761666131620a663537646436643839616531643561
63396265333966386166373632626539326166353965363262633030333630313338646335303630
3438626666666137650a353638643435666633633964366338633066623234616432373231333331
6564
但我不清楚,存储和使用多个用户的加密ssh密钥的好模式是什么。
以后如何将其他开发人员用户动态添加到ansible配置中?
我应该如何重构我的清单文件以使用能够验证自己的用户(现在ssh密钥的路径是硬编码的)。
我应该在这里使用什么类型的变量(组/主机)?
我应该将加密的ssh密钥(或保险库变量)存储在哪里,以获得灵活的解决方案?
将来我应该如何添加新的ssh密钥?
我更喜欢基于 --ask-vault-pass
而不是 --vault-id
,因为后者的文档不准确。
谢谢你的帮助!
1条答案
按热度按时间7bsow1i61#
为什么不使用ssh的代理转发?您只需要在远程主机上安装公钥。您可能希望将这些公钥存储在ansible project git存储库中,以便在新用户加入公司时在新的infrastructure/config更新上安装。将此添加到您的
ansible.cfg
文件。但是,如果你需要共享私钥,你只是做了一些可怕的错误。
有关ssh代理转发的其他背景信息。
编辑:回复评论
如果您可以保证整个基础结构中的用户登录都是相同的,并且您是工作站的用户,那么下面的工作不起作用吗:
如果你不能保证,那么,在我工作的地方,我们做了以下工作:我们有一个变量文件专门用于用户的个人设置。在剧本中需要的任何地方都可以进口。有存储的api密钥、凭据。。。在源代码方面,它被挡在git之外,只提供了一个模板来帮助新手填充它。出于安全原因,我们要求用户保管该文件。在下面的示例中,我将该文件命名为
company-member.yml
:而且在
company-member.yml
: