将机密(密码)存储在单独的fi中

2024-05-16 09:36:34 发布

您现在位置:Python中文网/ 问答频道 /正文

存储Python脚本的应用程序机密(密码、访问令牌)的最简单方法是什么?我以为它是一个类似于Ruby的*.yml文件,但出乎意料的是,我发现事实并非如此。那又是什么呢?最简单的解决方案是什么?

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


Tags: 文件方法github脚本应用程序密码yml解决方案
2条回答

我认为将凭证存储在另一个*py文件中是最安全的选择。那就进口吧。示例如下所示

配置py

username = "xy"
password = "abcd"

主.py

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

我处理的问题和kecer建议的完全一样,最终得到了同样的解决方案。由于我需要使用它几十个脚本,我创建了自己的库。让我和你分享这个解决方案。

credlib.py--用于处理凭据的通用库

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

my credentials.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)

请注意,传统的hostname/username/password方式仍然有效,因此不会影响旧脚本:

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

这有很多好处:

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

相关问题 更多 >