在github中处理密码的最佳做法是什么?
我有一个Bash脚本,用于访问twitter并在特定情况下popup一个Growl通知。 什么是最好的方式来处理与脚本存储我的密码?
我想在GitHub上发布这个脚本,但是我想知道在这样做的时候保持我的login名/密码是否是私有的最好方法是。 目前密码保存在脚本本身中。 我推不动,因为所有旧的提交将包含密码。 没有密码的开发不是一种select。 我想我应该把密码存储在一个外部configuration文件中,但是我想在我尝试并把一些东西放在一起之前,检查是否有一个确定的方法来处理这个问题。
执行此操作的典型方法是从configuration文件中读取密码信息。 如果您的configuration文件名为foobar.config
,那么您将提交一个名为foobar.config.example
的文件到存储库,其中包含示例数据。 要运行你的程序,你需要创build一个名为foobar.config
的本地(未被跟踪的)文件和你的真实密码数据。
要从之前的提交中过滤出现有的密码,请参阅关于删除敏感数据的GitHub帮助页面。
一种方法可以是使用环境variables来设置密码(或API密钥)。 所以这个密码没有修改控制。
用Bash,你可以使用设置环境variables
export YOUR_ENV_VARIABLE=your_password
这种方法可以与像Travis这样的持续集成服务一起使用,你的代码(没有密码)被存储在GitHub仓库中,可以由Travis执行(你的密码是使用环境variables设置的)。
使用Bash,您可以使用以下方法获取环境variables的值:
echo $YOUR_ENV_VARIABLE
使用Python,您可以使用以下方法获取环境variables的值:
import os print os.environ['YOUR_ENV_VARIABLE']
PS:请注意,这可能是有点风险(但这是一个相当普遍的做法) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/
PS2:这篇文章的标题是“如何安全地存储API密钥” https://dev.to/bpedro/how-to-securely-store-api-keys-ab6可能是有趣的阅读;
格雷格说什么,但我补充说,检查文件foobar.config-TEMPLATE
是一个好主意。
它应该包含示例名称,密码或其他configuration信息。 那么真正的foobar.config应该包含什么是非常明显的,而不必查看foobar.config
必须存在的所有代码以及它们应该具有的格式。
通常configuration值可能不明显,如数据库连接string和类似的东西。
可以使用Vault来保护,存储和控制对令牌,密码,证书,API密钥等的访问。例如, Ansible使用Ansible Vault来处理操作手册中使用的密码或证书
如果您在轨道上使用ruby,那么Figarogem非常好,简单而且可靠。 它与生产环境的头痛因素也很低。