linux中gpg加密生产配置文件并自动化解密的核心是“不暴露密码、不依赖交互、不跳过校验”;需生成专用密钥对、严格管控权限、显式指定接收者加密、用密码文件安全解密并全程校验。

在 Linux 中用 GPG 加密生产配置文件并自动化解密,核心是“不暴露密码、不依赖交互、不跳过校验”。手动操作不可靠,CI/CD 或部署脚本里一旦卡在密码输入或密钥缺失,整个流程就中断。下面从准备到落地分步说明。
准备好密钥与权限
加密和解密必须用同一套密钥体系,且权限严格:
- 生成专用密钥对(别用个人密钥):
gpg --full-generate-key,选 RSA 4096,邮箱设为deploy@prod,有效期建议 2–3 年 - 导出公钥供加密端使用:
gpg --export -a "deploy@prod" > deploy.pub,分发给构建环境 - 私钥只保留在部署目标机上,导入:
gpg --import deploy.sec(deploy.sec是导出的私钥,含密码保护) - 确保
~/.gnupg目录权限为700,私钥文件权限为600,属主为部署用户(如www-data或deploy)
加密配置文件(构建阶段)
在 CI 或打包机上执行,只需公钥,无需私钥和密码:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先导入接收方公钥:
gpg --import deploy.pub - 打包并加密(推荐):
tar -czf - config/ | gpg --batch --yes --recipient "deploy@prod" --encrypt > config.tgz.gpg - 或单文件加密:
gpg --batch --yes --recipient "deploy@prod" --encrypt app.conf -
关键点:不用
--default-recipient,必须显式指定 recipient;不加--armor(避免 Base64 增大体积);输出后校验:[[ -s app.conf.gpg ]] || exit 1
自动化解密(部署阶段)
在目标服务器运行部署脚本时解密,重点防卡住、防空输出、防密码泄露:
- 密码绝不硬编码,也不走命令行参数(
--passphrase会出现在ps) - 用独立密码文件(如
/etc/deploy/gpg-pass),权限600,属主同运行用户 - 解密命令示例:
gpg --batch --yes --passphrase-file /etc/deploy/gpg-pass --decrypt config.tgz.gpg | tar -xzf - -C /opt/app/ - 必须检查退出码:
gpg ... || { echo "GPG decrypt failed"; exit 1; } - 解密后验证关键文件存在且非空:
[[ -s /opt/app/config/db.yml ]] || exit 1
绕过密钥环的轻量替代(仅限单机自用)
如果只是自己加密自己解,且不想维护密钥对,可用对称加密,但注意局限:
- 加密:
gpg --symmetric --cipher-algo AES256 --batch --yes --passphrase-file /etc/deploy/gpg-pass config/→ 输出config/.gpg - 解密:
gpg --batch --yes --passphrase-file /etc/deploy/gpg-pass --decrypt config/.gpg | tar -xzf - -C /opt/app/ - 优势:不依赖 keyring,无公钥导入步骤;劣势:无身份认证,无法验证文件是否被篡改,仅防窥视










