【问题标题】:How do I protect my private keys when using github, heroku, and developing locally?使用 github、heroku 和本地开发时如何保护我的私钥?
【发布时间】:2011-04-13 11:54:15
【问题描述】:

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

但是,我想开始通过 github 公开我的代码,以便获得一些帮助。

为了实现这一点,我需要采取哪些步骤,特别是这样我才能在本地进行测试并在 heroku 上进行测试。

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

【问题讨论】:

    标签: ruby-on-rails github heroku


    【解决方案1】:

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

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

    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 密钥。

    【讨论】:

    • 任何有权访问您的 heroku 的人都不能通过 heroku 配置读取密钥吗?
    【解决方案2】:

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

    编辑:

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

    【讨论】:

    • 嗨,抱歉,你说的移动到初始化器是什么意思?
    • 没有问题,我更新了我的原始帖子,提供了有关初始化程序的更多信息。我假设你知道 .gitignore 是什么,因为你没有问。
    • 是的,谢谢,我熟悉 .gitignore :) 我熟悉该目录,但不知道如何处理它......
    • 好吧,我想我明白了......所以顺序可能是:1)更改所有密钥(这些已添加到 git 存储库历史记录中,所以如果我将它放入 github 所有这些历史记录也会在那里,不是吗?;2)将键分配移动到这个单独的文件 load_keys.rb,3)将它添加到 .gitignore 文件中?
    • 这听起来很对。如果您想从仓库的历史记录中删除密钥,这里有更多信息help.github.com/removing-sensitive-data
    【解决方案3】:
    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 或其他内容的钥匙串手册页)

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多