如何加密Bash脚本后无需解密直接执行并仅开放执行权限?
加密Bash脚本后无需解密直接执行的方法
方法一:OpenSSL加密+包装执行脚本
- 加密原脚本(你已完成此步骤):
openssl enc -aes-256-cbc -salt -in test.sh -out test.sh.enc -k $Password - 创建执行包装脚本(命名为
run_test.sh):
为避免明文密码泄露,推荐通过环境变量传递密码:#!/bin/bash # 从环境变量取密码,解密后直接通过bash执行,不生成明文文件 openssl enc -aes-256-cbc -d -salt -in test.sh.enc -k "$SCRIPT_PASSWORD" | bash - 设置权限:
- 加密脚本仅对所有者可读:
chmod 600 test.sh.enc - 包装脚本仅对所有者可执行:
chmod 700 run_test.sh
- 加密脚本仅对所有者可读:
- 执行方式:
若能接受脚本内明文密码(有泄露风险),可直接把密码写在包装脚本里,执行时无需输入密码:SCRIPT_PASSWORD="你的加密密码" ./run_test.sh#!/bin/bash PASSWORD="你的加密密码" openssl enc -aes-256-cbc -d -salt -in test.sh.enc -k "$PASSWORD" | bash
方法二:用shc编译为二进制可执行文件
shc可把shell脚本转成二进制可执行文件,生成的文件无法直接读取原脚本内容,执行无需解密步骤:
- 安装shc:
Ubuntu/Debian系统:
CentOS/RHEL系统:sudo apt install shcsudo yum install shc - 编译脚本:
参数shc -f test.sh -o test_exec-f指定原脚本,-o指定生成的二进制文件名 - 设置权限并运行:
chmod 700 test_exec ./test_exec
注意事项
- OpenSSL方法中,密码存储是核心问题:明文写在脚本里有泄露风险,用环境变量相对安全,但需防范环境变量通过
ps等命令泄露。 - shc生成的二进制文件并非绝对安全,存在逆向破解可能,但足以应对普通场景需求。
内容的提问来源于stack exchange,提问作者RACHID OUBELK
相关产品推荐
相关产品推荐

