将秘密(密码)存储在单独的文件中

时间:2014-08-26 08:36:53

标签: python configuration settings

为Python脚本存储应用程序机密(密码,访问令牌)的最简单方法是什么?我认为它是像Ruby中的*.yml文件但令人惊讶的是我发现事实并非如此。那么它是什么呢?什么是最简单的解决方案?

我想将它们放在单独的文件中,因为这样我无法将该文件推送到github存储库。

3 个答案:

答案 0 :(得分:36)

我认为将凭据存储在另一个* py文件中是最安全的选择。然后只需导入它。示例看起来像这样

config.py

username = "xy"
password = "abcd"

main.py

import config
login(config.username, config.password)

答案 1 :(得分:3)

我在处理完全相同的问题,实际上得到了与 kecer 建议的解决方案相同的解决方案。由于需要使用数十个脚本,因此我创建了自己的库。让我与您分享这个解决方案。

credlib.py -处理凭证的通用库

class credential:
    def __init__(self, hostname, username, password):
        self.hostname = hostname
        self.username = username
        self.password = password

mycredentials.py -我的本地文件,用于存储所有凭据

from credlib import credential
sys_prod = credential("srv01", "user", "pass")
sys_stg = credential("srv02", "user", "pass")
sys_db = credential("db01", "userdb", "passdb")

mysystemlib.py -这是访问我的系统的常规库(支持新的凭据系统和旧版)

from credlib import credential

def system_login(*args): # this is new function definition
#def system_login(hostname, username, password): # this was previous function definition

    if len(args) == 1 and isinstance(args[0], credential):
        hostname = args[0].hostname
        username = args[0].username
        password = args[0].password
    elif len(args) == 3:
        hostname = args[0]
        username = args[1]
        password = args[2]
    else:
        raise ValueError('Invalid arguments')

    do_login(hostname, username, password) # this is original system login call

main.py -结合了凭证和系统库的主脚本

from mycredentials import sys_stg, sys_db
import mysystemlib
...
mysystemlib.system_login(sys_stg)

请注意,旧版主机名/用户名/密码仍然有效,因此不会影响旧脚本:

mysystemlib.system_login("srv02", "user", "pass")

这有很多好处:

  • 我们所有python脚本中的凭证系统相同
  • 带有密码的文件是分开的(文件可以具有更严格的权限)
  • 文件未存储在我们的git存储库中(通过.gitignore排除在外),这样我们的python脚本/库就可以与其他人共享而无需暴露凭据(每个人都在本地文件中定义自己的凭据)
  • 如果需要更改密码,我们只能在一个地方进行

答案 2 :(得分:2)

我个人更喜欢将yaml文件与pyyaml库一起使用。 这里的文档:https://pyyaml.org/wiki/PyYAMLDocumentation

创建.gitignore规则非常快捷,轻松,并且犯错的机会为零。