概述
以我个人的需求为例,有时写一个脚本需要传密码,如果直接把密码写在脚本里会存在安全问题,一般是把密码写在脚本里,作为参数传给脚本,而保存密码的脚本,使用某种手段加密,令其不可读但是可执行。而常用的shell加密方法有两种,一种是通过gzexe加密,另一种是通过shc加密。
一、gzexe
1、概念
Linux gzexe命令用于压缩执行文件。
gzexe是用来压缩执行文件的程序。当执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。
gzexe加密很简单,并且gzexe是系统自带,所以不需要安装任何东西,只要在SSH中输入gzexe 加密的脚本。
2、gzexe加密
gzexe 脚本名
其中hwb.sh~ 是原文件 , hwb.sh 是压缩后的二进制文件
![1740b166b8e13ca4a9aba712df0eec0d.png](https://i-blog.csdnimg.cn/blog_migrate/9028c2be5dea0497b0672b4b7810c696.jpeg)
3、gzexe解密
gzexe但是通过gzexe加密的shell脚本并不是很安全,观察脚本可以看到内容中有一行叫skip=44,这一行非常重要,它告诉我们从第44行起才是原来压缩之前文件的内容,前面都是压缩软件附加上去的内容。虽然从44行往后面也全部都是乱码,我们也读不懂这些内容,但是gzip程序会告诉我们的。
首先我们把第44行以后的内容过滤出来生成一个.gz结尾文件,然后解压,文件内容就都出来了。
tail -n +44 hwb.sh > hwb.gz # 我们把第44行以后的文件写成一个.gz结尾的压缩文件gunzip hwb.gz # 解压生成的文件cat hwb # 解压后的文件和压缩文件同名--第二种方式gzexe -d hwb.sh
![4f0aa528bc1e6882634c49f33b71e07a.png](https://i-blog.csdnimg.cn/blog_migrate/0d761a660ccb0fdd528823087368bdf9.jpeg)
二、shc
1、安装shc
SHC官网地址:http://www.datsi.fi.upm.es/~frosal/sources/
--推荐编译指定版本wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.9.tgztar vxf shc-3.8.9.tgzcd shc-3.8.9make testmake stringsmkdir -p /usr/local/man/man1/make install
![90c3ef592c6f546ae12a3cc91f3c3821.png](https://i-blog.csdnimg.cn/blog_migrate/8c586f8f91f231f5acf074153f9ea610.jpeg)
2、shc加密
shc -r -f 脚本名
--运行后会生成两个文件,script-name.x 和 script-name.x.c
script-name.x是加密后的可执行的二进制文件,可重命名后运行.
script-name.x.c是生成script-name.x的原文件(c语言),基本没有作用,可以删除。
注意:如果脚本只需要在当前服务器上执行,可以不加参数-r,如果需要在别的系统下也能执行,这里就需要加-r
3、shc解密
项目地址:https://github.com/yanncam/UnSHc
git clone https://github.com/yanncam/UnSHc.git./UnSHc/latest/unshc.sh 脚本名
![f508313b0647baeac9acd04896f79ce8.png](https://i-blog.csdnimg.cn/blog_migrate/6d72e3283dea8f15e0fa6a9affbf89aa.jpeg)
4、实例
4.1、加密
shc -r -f log_clean.sh
![21115a2a110994dcf5bbb5345bfc68aa.png](https://i-blog.csdnimg.cn/blog_migrate/160bc7138391dbc1fe1a4de43e9c4afc.jpeg)
4.2、测试加密效果
可以发现已完成加密
![952f925d9f7a42cc102dd44e5fd6f30d.png](https://i-blog.csdnimg.cn/blog_migrate/0d4674365a424c040df86dd3932b1e87.jpeg)
4.3、解密
将unshc.sh文件和需要解密的shell脚本放在同一目录,然后终端在当前目录运行./unshc.sh shell文件名,如果可以解密的话就可以了
/home/scripts/UnSHc/latest/unshc.sh log_clean.sh.x
![47ba72ab4ea84a256b28efc17f784b4f.png](https://i-blog.csdnimg.cn/blog_migrate/0a30f4df72f83c1d51792c11fb0b77a2.jpeg)
后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!
![90d0b7e090c462ffa470363100406555.png](https://i-blog.csdnimg.cn/blog_migrate/b4635dd8c209494a5c7735abfba64a57.jpeg)