使用公共github存储库和travis加密进行持续部署

时间:2018-02-06 15:18:44

标签: capistrano travis-ci

我们正在考虑为目前使用Capistrano部署的rails应用程序设置ruby的持续部署。它们存储在github上的公共回购中。

我已经阅读了有关如何使用travis-ci.org执行此操作的文档,看起来您执行的操作类似于以下内容: -

gem install travis
travis login
travis encrypt DEPLOY_KEY="password" --add
openssl aes-256-cbc -k "password" -in deploy_id_rsa -out config/deploy_id_rsa_enc_travis -a

然后将其添加到travis.yml文件

after_success:
  - "openssl aes-256-cbc -k $DEPLOY_KEY -in config/deploy_id_rsa_enc_travis -d -a -out config/deploy_id_rsa"
  - "bundle exec cap deploy"

这是你的deploy.rb文件

set :ssh_options, keys: ["config/deploy_id_rsa"] if File.exist?("config/deploy_id_rsa")

现在我的问题是,这如何保护私钥安全。我猜测你只将以下文件提交给github公共仓库。

config/deploy_id_rsa_enc_travis
travis.yml
deploy.rb

并且应该删除该私钥,而不是已提交。

还有什么我应该注意的吗?

1 个答案:

答案 0 :(得分:0)

您提供的示例代码是使用名为deploy_id_rsa的私钥并使用密码对其进行加密。然后将该密码作为“秘密”存储在Travis中。该加密版本的密钥称为deploy_id_rsa_enc_travis。您可以安全地提交此文件:我们的想法是只有持有密码的人(即Travis)才能解密。

我会留意:

  1. 选择一个复杂且无法猜测的密码来执行加密。
  2. 特拉维斯的秘密是多么“秘密”?例如,$DEPLOY_KEY(密码)是否有可能回显到控制台输出?有人可以登录Travis并查看秘密吗?
  3. 专门为此目的生成deploy_id_rsa。不要重复使用现有密钥。
  4. 确保密钥对应于已锁定的部署用户(例如,没有sudo功能)。
  5. 永远不要提交原始的,未加密的密钥:deploy_id_rsa
  6. 另请考虑moving your Capistrano deployment to a separate, private repo。 Capistrano允许您将应用程序和部署配置保存在不同的位置。这样,公众就无法看到有关您的服务器基础架构的信息。