使用ansible自动使用SSH本地密钥进行git部署

时间:2014-02-21 05:14:25

标签: git deployment vagrant ssh-keys ansible

我正在和流浪者和安慰者一起工作。我想自动化ansible(You can check my repo here)的部署角色。 为此,我试图将我的本地ssh密钥部署到我的VPS和我的流浪客户机(我正在尝试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

问题

当我这样做:“流浪汉提供”时,控制台停在这里:

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”用户而我的VPS使用其他用户,所以我必须将ssh本地密钥放入这些用户中?

希望你能帮助我。谢谢。

更新

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

2 个答案:

答案 0 :(得分:32)

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

[ssh_connection]
ssh_args = -o ForwardAgent=yes

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

答案 1 :(得分:31)

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

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

group_vars / all:

deploy_user=vpsuser

<强> group_vars /流浪

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输出),你可能不得不摆弄你的~/.ansible.cfg)。

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

另一个选择是使用ansible从本地结帐分发您的应用程序:制作tarball,复制文件,解压缩,然后进行设置。这样,您就不需要在VPS上保留安全凭证。

祝你好运。