最近在做一个项目,需要把shell脚本自定拷贝到目标客户端中执行,但是并不想让用户知道脚本的源码,于是采用shc对shell脚本进行处理
首先装个wget工具
yum -y install wget
下载
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
解压到当前文件夹
tar zxf shc-3.8.7.tgz -C ./
解压后看到有如下文件
到shc的目录下
cd shc-3.8.7
使用make 或者make install安装
(仅用make就可以完成安装,运行shc时要指出绝对路径;用make install,将shc安装到/usr/local/bin下,可以直接运行)
make
这里看到make install执行失败了,但是make成功了,可以正常使用了
shc -r -f /脚本目录/脚本名称
参数说明:
- -e:指定过期时间为2010年10月20日
- -m:过期后打印出的信息;
- -v: verbose shc执行时打印信息
- -r: 可在相同操作系统的不同主机上执行
- -f: 指定源shell
如上图,执行后看到生成两个文件aa.x 和 aa.x.c
aa.sh是源shell文件
aa.x是加密后的可执行的二进制文件.
./aa.x 即可运行.
aa.x.c是生成script-name.x的原文件(c语言)
aa.x也可以拷到别的地方改名字,如再改成aa.sh 直接 ./aa.sh即可执行
注意,shc加密之后的脚本使用ps -ef|grep aa.sh 是看不到的。
看到网上解释说
shc工具来给shell脚本增加一层额外的安全保护. shc是一个脚本编译工具, 使用RC4加密算法,
它能够把shell程序转换成二进制可执行文件(支持静态链接和动态链接).
该工具能够很好的支持: 需要加密, 解密, 或者通过命令参数传递口令的环境.
这里就有个坑点,本来我打算用去检查脚本是否运行完成的
ps -ef|grep /root/test/aa.sh | grep -v grep
加密后不可行就只能改成根据shell脚本生成的log内容判断了
如果你有更好的办法,请留言,蟹蟹,一起学习一起进步~~~~~~