You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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:独立敏感信息配置文件,设置严格权限

该方案适合需要无人值守自动启动的场景,避免密码写在脚本或命令行中:

  1. 在你的个人用户目录下新建独立的凭证文件,例如~/.login_creds,内容填写:
username=你的账号
password=你的密码
  1. 立即修改文件权限,仅允许你个人读写:chmod 600 ~/.login_creds,该权限下其他普通用户完全无法读取文件内容
  2. 修改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"]
  1. 后台启动直接执行nohup python -u login.py > run.log 2>&1 &即可,无需交互,进程列表不会泄露密码,脚本本身也不包含敏感信息,管理员查看脚本也无法获取密码

方案3:加密存储凭证(针对需要防root读取敏感信息的场景)

如果想要避免root读取凭证文件拿到明文密码,可以采用对称加密存储凭证:

  • 提前用AES算法加密你的账号密码,把密文存在配置文件中
  • 启动脚本时用screen/tmux进入会话,手动输入解密密钥,脚本运行时在内存中解密得到明文账号密码
  • 解密密钥仅你自己知晓,且不会存在服务器磁盘上,就算root拿到密文配置文件也无法还原明文密码

注意事项

  • 凭证文件不要提交到任何代码仓库,建议添加到.gitignore规则中
  • 不要在脚本中硬编码任何敏感信息,所有敏感内容单独存在个人目录并设置600权限

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:03