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

osk*_*ast 30 git deployment ssh-keys vagrant ansible

我正在与流浪者和ansible一起工作.我想自动化ansible 的部署角色(你可以在这里查看我的repo).为此,我试图将我的本地ssh密钥部署到我的VPS和我的流浪客户机(我正在尝试SSH代理转发).

目标

使用ansible自动使用git进行部署过程.我已经这样做了:

---

- name: read-write git checkout from github
  git: repo={{ repository }} dest=/home/site
Run Code Online (Sandbox Code Playgroud)

哪里:

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

repository: git@bitbucket.org:dgnest/dgnest.git
Run Code Online (Sandbox Code Playgroud)

问题

当我做:"流浪汉提供",控制台停在这里:

TASK: [deployment | read-write git checkout from github] ********************** 
Run Code Online (Sandbox Code Playgroud)

那是因为我没有设置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
Run Code Online (Sandbox Code Playgroud)

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

希望您能够帮助我.谢谢.

更新:

我刚刚自动化@leucos答案(谢谢).复制私有和公共rsa密钥.我与实现分享此链接.

Igo*_*kiy 34

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

[ssh_connection]
ssh_args = -o ForwardAgent=yes
Run Code Online (Sandbox Code Playgroud)

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


leu*_*cos 31

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

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

group_vars/all:

deploy_user=vpsuser
Run Code Online (Sandbox Code Playgroud)

group_vars /游民

deploy_user=vagrant
Run Code Online (Sandbox Code Playgroud)

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

- 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
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何询问远程私钥的密码(我不认为ansible默认允许身份验证代理转发(检查-vvvv输出),你可能不得不摆弄你的~/.ansible.cfg).

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

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

祝好运.