gpt4 book ai didi

git - 安全地在 Git 存储库中存储 SSH key 的 Ansible 设计模式?

转载 作者:可可西里 更新时间:2023-11-01 16:36:33 25 4
gpt4 key购买 nike

我一周前开始使用 Ansible,很抱歉,如果这是一个简单的问题,我没有这方面的经验...

我的问题是我需要使用 Ansible 开发软件部署解决方案,其他开发人员将来可以轻松使用。在这个解决方案中,需要下载一个 Git 存储库,其中包含一个 VagrantFile,然后创建一个安装 Ansible 的 Vagrant box,其中 Ansible 配置为使用 jumpserver 和网关连接到 Hadoop 集群。

为了连接到公司的环境,可以使用 SSH key 或用户/密码(开发人员有自己的开发人员帐户),所以我决定生成用于开发的 SSH key ,我在 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 key ,不仅是为了我自己,也是为了任何开发人员(没关系,如果我稍后将他们的 SSH key 添加到 Ansible 配置中)。

由于将 SSH key 直接存储在 Git 存储库中不是一个好的模式,所以我研究了如何加密存储密码: https://docs.ansible.com/ansible/2.4/vault.html(该文档在某些情况下存在缺陷和错误)

现在我可以将任何 SSH 密码转换为加密格式,如下所示:

my_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
62313365396662343061393464336163383764373764613633653634306231386433626436623361
6134333665353966363534333632666535333761666131620a663537646436643839616531643561
63396265333966386166373632626539326166353965363262633030333630313338646335303630
3438626666666137650a353638643435666633633964366338633066623234616432373231333331
6564

但我不清楚为多个用户存储和使用加密 SSH key 的良好模式是什么。

  • 以后如何将其他开发人员动态添加到 Ansible 配置中?

  • 我应该如何重组我的 list 文件以使用可以验证自己的用户(现在我的 SSH key 的路径是硬编码的)。

  • 我应该在这里使用什么样的变量(组/主机)?

  • 我应该在哪里存储加密的 SSH key (或保险库变量)以获得灵活的解决方案?

  • 我以后应该如何添加新的 SSH key ?

我更喜欢基于 --ask-vault-pass 而不是 --vault-id 的解决方案,因为在后一种情况下文档不准确。

感谢您的帮助!

最佳答案

为什么不用SSH的代理转发?您只需要在远程主机上安装公钥。您可能希望将这些公钥存储在您的 ansible 项目 git 存储库中,以便在新用户加入您的公司时轻松安装在新的基础设施/配置更新上。将此添加到您的 ansible.cfg 文件中。

[ssh_connection]
ssh_args = -o ForwardAgent=yes

但是如果您需要共享私钥,那您就大错特错了。

一些额外的background info关于 SSH 代理转发。

编辑:对评论的回答

如果您可以保证用户登录在整个基础架构中是相同的,并且您是用户工作站,那么以下操作是否可行:

- name: Reach jumpserver
hosts: company_hadoop_edgenode
remote_user: "{{ lookup('env', 'LOGIN') }}"
tasks:
- ping:
- command: hostname
register: out
- debug: msg="{{out.stdout_lines}}"

如果您不能保证,那么在我工作的地方,我们做了以下工作:我们有一个专用于用户的个人设置 的变量文件。它会在剧本中需要的任何地方导入。有存储的 API key 、凭据……源代码明智,它不在 git 中,只提供一个模板来帮助新手填写它。出于安全原因,我们要求我们的用户保存该文件。在下面的示例中,我将该文件命名为 company-member.yml:

- name: Reach jumpserver
hosts: company_hadoop_edgenode
remote_user: "{{ company_login }}"
vars_files:
- vars/company-member.yml
tasks:
# ...

company-member.yml 中:

company_login: my_personal_login
# And all other personal info and credentials

关于git - 安全地在 Git 存储库中存储 SSH key 的 Ansible 设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com