使用github,heroku和本地开发时如何保护我的私钥?

时间:2010-09-16 23:24:41

标签: ruby-on-rails github heroku

目前,我将用于访问环境.rb文件中的其他API等的密钥。这样,当我在本地运行时,以及在heroku上都可以使用它。

但是,我想开始通过github公开我的代码,这样我就可以得到一些帮助。

为实现这一目标,我需要采取哪些步骤,尤其是我可以在本地进行测试并在heroku上进行测试。

似乎在heroku上有一种方法可以从命令行添加密钥,因此它们不需要驻留在ruby-on-rails应用程序中。但是对于地方发展呢?

3 个答案:

答案 0 :(得分:16)

您可以使用环境变量(heroku上的config vars)来存储您的API密钥,而不是将它们检查到源代码中。

对于我正在处理的project,我使用twitter-auth的分支,并将其更改为从env变量中读取客户端密钥和密钥:

http://github.com/dpmcnevin/twitter-auth/blob/ace5d60a8ed8121cca4c97ef30a0cd025b99bfe1/lib/twitter_auth.rb#L68

OAuth::Consumer.new(
  ENV['oauth_consumer_key'] || config['oauth_consumer_key'],          
  ENV['oauth_consumer_secret'] || config['oauth_consumer_secret'],
  options 
)

然后我在项目目录中的.rvmrc中设置密钥以供本地使用:

export oauth_consumer_key=xxxxxxxxxxxx
export oauth_consumer_secret=xxxxxxxxxxxxxxxxxxx
rvm ree@redactify

最后在heroku上设置环境变量:

$ heroku config:add oauth_consumer_key=xxxxxxxxxxxxx
$ heroku config:add oauth_consumer_secret=xxxxxxxxxxxxx
$ heroku config
DATABASE_URL          => postgres://.....
RACK_ENV              => production
oauth_consumer_key    => xxxxxxxxxxxxxxxx
oauth_consumer_secret => xxxxxxxxxxxxxxxxxxx

然后确保.rvmrc位于.gitignore,然后您可以推送到github而不会暴露任何API密钥。

答案 1 :(得分:4)

将它们移动到初始化程序并将文件添加到.gitignore

编辑:

config中有一个名为initializers的目录。这是您放置应用程序启动时应运行一次的代码的位置。在过去,environment.rb用于这些设置,但初始化程序使事情更好地组织。我会在initializers目录中创建一个名为“load_keys.rb”的文件或类似的东西。在这个文件中,您可以在github中放置您不想要的environment.rb文件中的确切代码。

答案 2 :(得分:1)

  1. 像往常一样将私钥放在〜/ .ssh中。
  2. 使用密码加密您的私钥。
  3. 安装keychain
  4. eval $(keychain private-key-file1 private-key-file2 private-key-file3; source ~/.keychain/${HOSTNAME}-sh)添加到〜/ .bashrc,〜/ .profile,〜/ .bash_profile或者你有什么。 (请参阅csh,tcsh,zsh或其他任何内容的keychain手册页)