加密你的 bash shell 脚本

一般情况下我们是不推荐加密你的shell脚本,这一点违背了开源的精神,但有的时候脚本里有一些敏感信息,还是加密一下吧。

1.下载shc并安装她

下载和安装shc

# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# tar xvfz shc-3.8.7.tgz
# cd shc-3.8.7
# make

验证shc是不是安装正确

$ ./shc -v
shc parse(-f): No source file specified

shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

2.创建一个示例脚本

要确定这个脚本可以正常运行

$ vi random.sh
#!/bin/bash

echo -n "How many random numbers do you want to generate? "
read max

for (( start = 1; start <= $max; start++ ))
do
  echo -e $RANDOM
done

$ ./random.sh
How many random numbers do you want to generate? 3
24682
1678
491

3.使用shc加密上面的 shell 脚本

$ ./shc -f random.sh

运行上面命令会生成2个文件

$ ls -l random.sh*
-rwxrw-r--. 1 ramesh ramesh   149 Mar 27 01:09 random.sh
-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x
-rw-rw-r--. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c

4.执行加密后的脚本

$ ./random.sh.x
How many random numbers do you want to generate? 3
7489
10494
29627

注意加密后的二进制脚本是依赖bash的(原始脚本第一行要加/bin/bash)<!-- more -->

5.设置脚本额外信息

设置脚本失效时间

$ ./shc -e 31/12/2011 -f random.sh

$ ./random.sh.x
./random.sh.x: has expired!
Please contact your provider

设置脚本的作者信息

$ ./shc -e 31/12/2011 -m "Contact admin@thegeekstuff.com for new version of this script" -f random.sh

$ ./random.sh.x
./random.sh.x: has expired!
Contact admin@thegeekstuff.com for new version of this script

6.创建独立的可分发的加密脚本

$ ./shc -v -r -T -f random.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc  random.sh.x.c -o random.sh.x
shc: strip random.sh.x
shc: chmod go-r random.sh.x

$ ./random.sh.x
How many random numbers do you want to generate? 3
28954
1410
15234

最后还是要说一句,bash shell 脚本还是不要加密,这不符合开源的精神。如果你实在要加密,也要当心那些不怀好意的家伙会把你的编译源文件反编译出来。

英文原文:How to Encrypt Your Bash Shell Script on Linux Using SHC