【问题标题】:automate usage of SSH local key for git deployment with ansible使用 ansible 自动使用 SSH 本地密钥进行 git 部署
【发布时间】:2014-03-22 11:00:29
【问题描述】:

我正在与 vagrant 和 ansible 一起工作。我想自动化 ansible (You can check my repo here) 的 部署 角色。 为此,我正在尝试将我的本地 ssh 密钥部署到我的 VPS 和我的 vagrant guest 机器中(我正在尝试 SSH 代理转发)。

目标

使用 ansible 使用 git 自动化部署过程。我已经这样做了:

---

- name: read-write git checkout from github
  git: repo={{ repository }} dest=/home/site

地点:

---
# Variables here are applicable to all host groups

repository: git@bitbucket.org:dgnest/dgnest.git

问题

当我这样做时:“vagrant provision”,控制台停在这里:

TASK: [deployment | read-write git checkout from github] ********************** 

那是因为我没有设置 ssh 密钥。

我试过了

我想使用 ansible 的 git 模块的 key_file 选项。但它也失败了。

---                                                                             

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=/home/oscar/.ssh/id_rsa.pub

另一种选择是将我的 ~/ssh/id_rsa.pub 复制到每个 VPS 和 vagrant 中,但在这种情况下我的问题是处理所有不同的用户。 Vagrant 使用“vagrant”用户,而我的 VPS 使用另一个用户,所以我必须将我的 ssh 本地密钥放入每个用户中?

希望你能帮助我。谢谢。

更新:

我刚刚自动化了@leucos 的回答(谢谢)。复制私钥和公钥 rsa 密钥。我与实施分享 this link

【问题讨论】:

  • 复制 RSA 私钥确实是个坏主意。共享私钥真的是个坏主意。例如,您是否信任您与他们共享的团队成员(以及所有其他有权访问远程服务器的员工)访问您的私人存储库?如果不是 - 请保留您的私钥 private

标签: git deployment vagrant ssh-keys ansible


【解决方案1】:

不必将本地 SSH 密钥复制到远程服务器。相反,您只需在运行部署脚本的目录中创建名为 ansible.cfg 的文件,然后输入以下设置:

[ssh_connection]
ssh_args = -o ForwardAgent=yes

就是这样,现在您的本地身份已转发到您使用 Ansible 管理的远程服务器。

【讨论】:

  • 感谢您提供此解决方案。但在我的实践中,您需要在 root 上设置服务器并与其他用户一起部署。 SSH forvarding 仅适用于通过 ssh 连接的用户。如果你想与其他非 root 用户一起使用它,你应该拆分你的 ansible playbook,一个你通过 root 连接并安装所有,另一个你确实部署购买其他用户。在此配置中,您可以使用普通用户从私人仓库部署,而无需任何 ssh 密钥。使用 Django + Ansible 像魅力一样工作。
  • SSH 代理转发是不安全的,如果您的远程服务器受到威胁,攻击者可能会使用它来访问代理密钥使他能够访问的服务器。来自man ssh 上的-A 选项:“应谨慎启用代理转发。能够绕过远程主机上的文件权限(对于代理的UNIX 域套接字)的用户可以通过转发的连接访问本地代理. 攻击者无法从代理获取密钥材料,但是他们可以对密钥执行操作,使他们能够使用加载到代理中的身份进行身份验证。”
【解决方案2】:

如果你选择key_file的方式,我的猜测是key一定在VPS/vagrant机器上。所以你可能想先复制它。请注意,您需要的是私钥,而不是公钥。

对于您的第二个选项,您可以根据实例类型将密钥推送给特定用户。假设 VPS 中的用户是 vpsuser,并且您主要部署在这些 VPS 上,您可以这样做:

group_vars/all :

deploy_user=vpsuser

group_vars/vagrant

deploy_user=vagrant

然后,你可以有一个这样的剧本:

- name: send key to remote deploy user
  copy: src=files/private_key dest=~/{{deploy_user}}/.ssh/priv_key

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=~/{{deploy_user}}/.ssh/priv_key

但是,我不知道如何询问远程私钥的密码(我认为 ansible 默认情况下不允许身份验证代理转发(检查-vvvv 输出),您可能不得不摆弄您的@987654326 @)。

我建议您使用特定的密钥进行部署(在您的 git 存储库中具有只读权限)。这样,您的私钥就不会离开您的机器。使此特殊密钥无密码。我认为安全权衡是可以接受的,因为 - 它只会保护你的代码, - 您的代码已在私钥所在的机器上签出,因此游戏已经结束。

另一种选择是使用 ansible 从本地结帐分发您的应用程序:制作一个 tarball,复制文件,解压缩,然后就完成了。这样,您无需在 VPS 上留下安全凭证。

祝你好运。

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2019-02-12
    • 2023-01-05
    相关资源
    最近更新 更多