我有一个小Bash脚本,我用它来访问twitter,并在某些情况下弹出咆哮通知。用脚本存储密码的最佳方法是什么?

I would like to commit this script to the git repo and make it available on GitHub, but I'm wondering what the best way to keep my login/password private while doing this is. Currently, the password is stored in the script itself. I can't remove it right before I push because all the old commits will contain the password. Developing without a password isn't an option. I imagine that I should be storing the password in an external config file, but I thought I'd check to see if there was an established way to handle this before I tried and put something together.


当前回答

Greg说的,但我想补充的是,签入文件foobar.config-TEMPLATE是个好主意。

它应该包含示例名称、密码或其他配置信息。那就很明显什么才是真正的傻瓜了。Config应该包含,而不必查看所有必须在foobar中显示的值的代码。配置和格式。

通常配置值可以是不明显的,如数据库连接字符串和类似的东西。

其他回答

一种方法是使用环境变量设置密码(或API密钥)。 所以这个密码不受修改控制。

使用Bash,您可以使用来设置环境变量

export your_env_variable='your_password'

这种方法可以与Travis这样的持续集成服务一起使用,你存储在GitHub存储库中的代码(没有密码)可以由Travis执行(使用环境变量设置你的密码)。

使用Bash,你可以使用以下命令获取环境变量的值:

echo "$your_env_variable"

使用Python,你可以使用以下命令获取环境变量的值:

import os
print(os.environ['your_env_variable'])

PS:请注意这可能有点风险(但这是一种相当常见的做法)https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

PS2:这篇题为“如何安全地存储API密钥”的dev.to文章可能会很有趣。

下面是我使用的一个技巧:

我在我的主文件夹中创建了一个名为: config

在这个文件夹中,我放置了我想外部化密码和密钥的任何数量的配置文件。

我通常使用反向域名语法,例如:

com.example.databaseconfig

然后在bash脚本中我这样做:

#!/bin/bash
source $HOME/.config/com.example.databaseconfig ||exit 1

|| exit 1如果无法加载配置文件,将导致脚本退出。

我在bash、python和ant脚本中使用了这种技术。

我很偏执,认为.gitignore文件不够健壮,无法防止无意签入。此外,没有任何监控机制,所以即使发生了签入,也没有人会发现如何处理它。

如果一个特定的应用程序需要一个以上的文件,我创建子文件夹而不是一个单一的文件。

可以使用HashiCorp Vault来保护、存储和控制对令牌、密码、证书、API密钥等的访问。

Ansible特别有一个“Vault”功能(与HashiCorp产品无关),用于加密静止的秘密。

如果您正在使用ruby on rails,费加罗宝石非常好,简单,可靠。它在生产环境中也没有什么令人头痛的因素。

Greg说的,但我想补充的是,签入文件foobar.config-TEMPLATE是个好主意。

它应该包含示例名称、密码或其他配置信息。那就很明显什么才是真正的傻瓜了。Config应该包含,而不必查看所有必须在foobar中显示的值的代码。配置和格式。

通常配置值可以是不明显的,如数据库连接字符串和类似的东西。