我们正在考虑为目前使用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
并且应该删除该私钥,而不是已提交。
还有什么我应该注意的吗?
答案 0 :(得分:0)
您提供的示例代码是使用名为deploy_id_rsa
的私钥并使用密码对其进行加密。然后将该密码作为“秘密”存储在Travis中。该加密版本的密钥称为deploy_id_rsa_enc_travis
。您可以安全地提交此文件:我们的想法是只有持有密码的人(即Travis)才能解密。
我会留意:
$DEPLOY_KEY
(密码)是否有可能回显到控制台输出?有人可以登录Travis并查看秘密吗?deploy_id_rsa
。不要重复使用现有密钥。deploy_id_rsa
。另请考虑moving your Capistrano deployment to a separate, private repo。 Capistrano允许您将应用程序和部署配置保存在不同的位置。这样,公众就无法看到有关您的服务器基础架构的信息。