gpg非对称加密备份最可靠:本地离线、仅需公钥加密、私钥解密;须用4096位rsa密钥、aes256算法、--force-mdc和zip压缩;管道打包加密防明文落地;公钥需指纹核验,私钥绝不暴露;脚本需set -e和权限管控。

直接用 GPG 对备份压缩包做非对称加密,是本地化、离线化保障数据安全最可靠的方式之一——整个过程不联网、不传密钥、不依赖第三方服务,只需对方公钥就能完成加密,解密则完全由接收方私钥控制。
选对算法和参数,避免默认弱配置
GPG 默认生成的 2048 位密钥和 CAST5/AES128 等旧算法已不推荐用于当前生产环境。应主动指定更强组合:
- 生成密钥时用 gpg --full-generate-key,类型选 RSA,长度输 4096
- 加密命令中必须显式加 --cipher-algo AES256,禁用默认较弱的对称层算法
- 启用完整性保护:--force-mdc;压缩用 ZIP 格式(更兼容):--compress-algo 2
打包+加密一步到位,不落地明文
用管道把 tar 和 gpg 串起来,避免生成中间 .tar.gz 明文文件,节省磁盘空间并减少泄漏风险:
- tar cz /data | gpg --encrypt --recipient user@domain.com --cipher-algo AES256 --force-mdc --compress-algo 2 -o backup_$(date +%Y%m%d).tar.gz.gpg
- 输出文件后缀为 .gpg,用 file backup.tar.gz.gpg 查看会显示 “data”,无法识别格式,说明加密有效
- 若需排除临时文件,可在 tar 中加 --exclude='*.tmp' 等选项
确保公钥可信,私钥永不暴露
加密是否真正安全,关键在公钥来源是否真实、私钥是否被隔离保护:
- 导入对方公钥后,立即执行 gpg --fingerprint user@domain.com,与对方线下或可信渠道提供的指纹比对
- 接收方解密时,GPG 会弹出密码短语输入框,输入正确后才调用私钥——私钥从不离开内存,也不写入磁盘
- 私钥导出必须离线加密:先 gpg --export-secret-keys -a user@domain > privkey.asc,再用另一个强密码 gpg -c privkey.asc 加密,存 USB 并物理隔离
自动化脚本中注意权限与错误处理
放进 cron 或 systemd timer 运行时,要防止因权限、路径或失败而静默中断:
- 脚本开头加 set -e,任一命令失败即退出;关键步骤后加 || exit 1
- 备份目录(如 /backup/)需对运行用户有写权限;源目录要有读权限
- 不要在脚本里硬编码密码;用 gpg --decrypt 从加密文件读取口令,或依赖 gpg-agent 缓存











