在 Python 脚本中隐藏登录凭据

Hide login credentials in Python script

我正在使用 Python 2.7.3 并成功将我的登录凭据传递到 SMTP 服务器,以便在发生事件触发时向我发送文本或电子邮件。但是,现在我想将 SMTP 服务器登录名和密码存储在一个单独的文件中,以便多个脚本可以使用该信息,或者我可以共享我的脚本而不必每次都删除我的凭据。

我用的是大tutorial from Alex Le on sending an SMS via Python。但是现在我想把下面的片段放到另一个可以被多个脚本调用的文件中。这可能只是 username/password 对或整个部分。

server = smtplib.SMTP( "smtp.gmail.com", 587 )
server.starttls()
server.login( '<gmail_address>', '<gmail_password>' )

我认为自己是一个非常基础的 Python 程序员。我不介意做一些研究,但我认为我需要帮助了解我应该寻找的术语。

使用单独的配置文件 settings.py 包含:

EMAIL = 'gmail address'
PASSWORD = 'gmail password'

由于配置文件是一个Python文件,您可以从您的实际代码中导入它:

from . import settings

server = smtplib.SMTP( "smtp.gmail.com", 587 )
server.starttls()
server.login(settings.EMAIL, settings.PASSWORD)

这个和Django等项目用的类似,大家可以看看here

您需要对 settings.py 文件保密,这样您就不会将其添加到您的修订控制软件中,也不会使其公开可读。

在生产环境中,我们通常做的是制作一个单独的文件并将其保存在项目之外的某个地方。现在执行 chmod 600,即只允许 root 访问该文件。现在在你的代码中 运行 在超级用户模式下通过 运行ning 读取文件。或者您也可以创建一个不同的用户,该用户可以使用该用户访问该文件和 运行 代码。

或者您可以在系统中使用环境变量。您可以通过在 bash shell

中执行以下操作来设置一个
export KEY=some_value

然后在您的 Python 代码中

os.environ.get('KEY')

从 .yml 文件中获取所有关键变量:

import yaml
conf = yaml.load(open('conf/application.yml'))
email = conf['user']['email']
pwd = conf['user']['password']

server = smtplib.SMTP( "smtp.gmail.com", 587 ) # add these 2 to .yml as well
server.starttls()
server.login(email, pwd)

application.yml 看起来类似于:

user:
    email: example@mail.com
    password: yourpassword

这样,您将永远不会在脚本中看到实际凭据。