使用nohup后台运行Python脚本时如何隐藏密码避免泄露?
共享服务器后台运行Python登录脚本的密码安全解决方案
问题根因说明
你遇到的nohup下click交互失效问题,是因为nohup默认会把程序的标准输入重定向到/dev/null,输入内容自然无法被click的prompt函数接收。
可行解决方案
方案1:保留交互逻辑,用screen/tmux替代nohup实现后台运行
该方案不需要修改现有代码,同时避免密码出现在进程列表中:
- 执行
screen命令进入虚拟终端会话 - 直接运行
python -u login.py,按提示输入账号密码,程序正常启动后按Ctrl+A+D退出screen会话 - 程序会在后台持续运行,不会随SSH连接断开终止,进程列表中不会出现账号密码信息,需要查看运行状态时执行
screen -r即可恢复会话
方案2:独立敏感信息配置文件,设置严格权限
该方案适合需要无人值守自动启动的场景,避免密码写在脚本或命令行中:
- 在你的个人用户目录下新建独立的凭证文件,例如
~/.login_creds,内容填写:
username=你的账号 password=你的密码
- 立即修改文件权限,仅允许你个人读写:
chmod 600 ~/.login_creds,该权限下其他普通用户完全无法读取文件内容 - 修改Python脚本,读取凭证文件获取账号密码,删除原有click交互逻辑:
import os def load_creds(): cred_path = os.path.expanduser("~/.login_creds") creds = {} with open(cred_path, "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line or line.startswith("#"): continue k, v = line.split("=", 1) creds[k.strip()] = v.strip() return creds creds = load_creds() username = creds["username"] password = creds["password"]
- 后台启动直接执行
nohup python -u login.py > run.log 2>&1 &即可,无需交互,进程列表不会泄露密码,脚本本身也不包含敏感信息,管理员查看脚本也无法获取密码
方案3:加密存储凭证(针对需要防root读取敏感信息的场景)
如果想要避免root读取凭证文件拿到明文密码,可以采用对称加密存储凭证:
- 提前用AES算法加密你的账号密码,把密文存在配置文件中
- 启动脚本时用screen/tmux进入会话,手动输入解密密钥,脚本运行时在内存中解密得到明文账号密码
- 解密密钥仅你自己知晓,且不会存在服务器磁盘上,就算root拿到密文配置文件也无法还原明文密码
注意事项
- 凭证文件不要提交到任何代码仓库,建议添加到
.gitignore规则中 - 不要在脚本中硬编码任何敏感信息,所有敏感内容单独存在个人目录并设置
600权限
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

