我正在和流浪者和安慰者一起工作。我想自动化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 。
答案 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上保留安全凭证。
祝你好运。