我最近开始和Ansible一起玩,这看起来非常不错。我在DevOps方面没有太多经验,也从未真正处理过任何复杂的情况。我开始创建Ansible剧本以替换当前的部署工具-Deployer PHP。不幸的是,我被困在克隆git仓库。现在,我知道我需要添加一个公钥来启用对git存储库的访问,这是我的问题。

我应该使用SSH代理转发(这样我就可以使用本地SSH密钥),还是应该将私人SSH密钥(加密,添加到源代码管理中)存储在ansible项目中,并使用Ansible复制它到我的目标节点?我知道问题可能非常广泛,所以让我感兴趣的是这两种方法的安全隐患。

#1 楼

您也可以考虑使用Ansible Vault加密包含私钥SSH密钥的文件。

一些链接:

http://docs.ansible.com/ansible/latest/ playbooks_vault.html

https://therealmarv.com/ansible-vault-file-handling/

https://www.calazan.com/how-to-deploy使用ansible-and-openssl加密复制您的SSL密钥和其他文件/

#2 楼

如果您的git仓库是私有github,则可以使用github方法(部署密钥非常强大)。
如果您的仓库不是托管在github上,或者它们不提供只读的部署密钥功能,则这两个选项您提到的都是有价值的。
单个DevOps家伙
如果您是唯一从事此项目的人,并且您的机器是唯一的,则您可以从(没有jenkins和朋友的CD工具)运行ansible最好使用代理转发选项:您不太可能忘记未加密的私钥。
小团队
如果您是由同一人在同一Ansible剧本上工作的团队或多个人运行剧本的话,您有两个选择:


保留代理转发选项;每个队友都从他的计算机上运行脚本。


创建一个部署者密钥对,上传pub-key并按照Berlin的建议使用保管库对私有密钥进行加密。密钥已加密,并且私钥的范围仅限于1个或几个回购协议。这种方法的问题在于,每次队友离开团队时都必须旋转保险库密码。


我永远不会将我的个人私钥(范围很广)放在任何可能不安全的地方。保管库加密与使用它的人一样好,并且有很多明文形式的密钥/密码:)

#3 楼


我是否应该使用SSH代理转发(通过这种方式,我可以使用本地SSH密钥)


是的,可以选择


我应该在ansible项目中存储私有SSH密钥(加密,添加到源代码管理中)吗?
,并使用Ansible将其复制到目标节点吗?




https://serverfault.com/questions/823956/ansible-security-best-practices


对于服务器,不允许root用户访问通过ssh。许多审核都对此sc之以鼻。

为了使Ansible,让每个管理员在每个
目标服务器上使用他们自己的个人帐户,并让他们使用密码sudo。这样,两个人之间不会共享密码
。您可以检查谁在每个
服务器上做了什么。个人帐户只允许使用密码登录,
ssh密钥登录,还是同时要求两者都由您自己决定。




总而言之,使用带密码的ssh密钥。让每个用户使用他们自己的ssh密钥。切勿允许通过ssh进行sudo访问。

评论


嗯,我不确定这是否适用于上下文。我询问了用于在部署应用程序时从存储库中提取(只读)代码的SSH密钥。使用SSH代理,我需要将每个公用密钥(每个用户)作为部署密钥添加到存储库中。

– pzaj
17年9月17日在16:14

#4 楼

您可以在一种情况下说明您的私钥:如果您配置存储库,使其仅允许对该特定密钥进行读取访问,则不必担心存储库是公共可读的。在这种情况下,您可以轻松存储您的私钥-显然不用密码就可以创建一个一次性密钥。但是正如我说的,只有在您可以公开访问该存储库的情况下才可以。

如果不是这种情况,那么您可能会陷入SSH代理的困境。这不是理想的选择,因为root可以占用套接字,但是如果您处于一种友好的环境中(即附近没有任何可攻击的网络服务器),那么应该可以。