隐藏Python脚本中的登录凭据

时间:2015-12-11 18:59:16

标签: python python-2.7 credentials

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

我正在使用伟大的tutorial from Alex Le on sending an SMS via Python。但现在我想采取以下段并将其放入另一个可由多个脚本调用的文件中。这可以是用户名/密码对,也可以是整个部分。

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

我认为自己是一个非常基本的Python程序员。我不介意做一些研究,但我认为我需要帮助我应该寻找什么条件。

3 个答案:

答案 0 :(得分:8)

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

或者您可以在系统中使用环境变量。您可以通过在bash shell中执行以下操作来设置一个

export KEY=some_value

然后在你的Python代码中

os.environ.get('KEY')

答案 1 :(得分:4)

从.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

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

答案 2 :(得分:2)

使用包含以下内容的单独配置文件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文件,因此您不会将其添加到修订控制软件中,也不会使其公开可读。