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

如何在MySQL备份加密的Bash脚本中为openssl enc提供密码?

解决openssl加密时自动填充密码的问题

首先纠正你原脚本里的一个错误:tar -cf ${DB}_${DATE}.tar *.sql 是直接创建本地tar文件,不会将内容输出到管道,因此openssl实际没拿到有效加密数据。要让tar把内容传给管道,需要用-作为输出目标,让tar将内容输出到标准输出。

接下来是自动填充密码的几种可行方案:

方案1:通过环境变量传递密码

把密码存到环境变量里,openssl可以直接读取该变量,避免明文暴露在命令行:

# 设置加密密码的环境变量(建议脚本开头设置,且确保脚本权限为700,防止其他用户查看)
export DB_ENCRYPT_PWD="your_strong_password_here"

# 打包SQL文件并加密输出
tar -cf - *.sql | openssl enc -aes-256-cbc -pbkdf2 -e -passin env:DB_ENCRYPT_PWD > ${DB}_${DATE}.tar.enc

如果需要同时压缩文件,把tar命令改成tar -czf - *.sql,输出文件后缀可以用.tar.gz.enc。

方案2:通过密码文件传递密码

把密码写入一个权限严格控制的文件,让openssl读取该文件:

# 先创建密码文件,必须设置严格权限防止泄露
echo "your_strong_password_here" > /path/to/db_encrypt.pwd
chmod 600 /path/to/db_encrypt.pwd

# 打包加密
tar -cf - *.sql | openssl enc -aes-256-cbc -pbkdf2 -e -passin file:/path/to/db_encrypt.pwd > ${DB}_${DATE}.tar.enc

不推荐的方案:明文直接写在命令行

虽然可以用-passin pass:yourpassword直接在命令行指定密码,但这种方式会让密码出现在系统进程列表(通过ps命令就能看到),风险极高,绝对不建议在生产环境使用。

额外注意

解密时也需要对应传递密码,比如用环境变量的话,解密命令是:

openssl enc -aes-256-cbc -pbkdf2 -d -passin env:DB_ENCRYPT_PWD < ${DB}_${DATE}.tar.enc | tar -xf -

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:30:38