Shell脚本中不明文显示密码

在日常工作中经常遇到在shell中使用明文密码的情形,例如mysqldump、mysql、redis等远程操作中,为了快速的完成任务而使用明文密码。

漏洞扫描与代码检测会对明文密码告警

所以实际工作中尽量不要记录明文密码。效率与安全往往是相悖的,如果一些重复繁琐的工作必须以明文连接方式执行,可以通过记录密文的方式来规避明文显示。

附带一份shell加密脚本。可以直接混入shell脚本中使用。

#!/bin/bash

function b64Code()
{
    #参数1: 需要加密的串
    passauth=$1
    #参数2: 加密的次数,次数越多密码越长
    for i in `seq 1 $2`
    do
        #python2
        #hidePwd=`echo $PASSWORD_STR |python -c "import base64;s=raw_input();print(base64.b64encode(s))"`
        #python3
        passauth=`echo $passauth |python -c "import base64;s=input(); print(base64.b64encode(s.encode()).decode());"`
        echo "[+]第${i}次加密结果:$passauth"
    done
}

function deCode()
{
    #参数1: 加密串内容
    passDstr=$1
    #参数2: 密码解析次数
    for i in `seq 1 $2`
    do
        passDstr=`echo $passDstr |python -c "import base64;s=input(); print(base64.b64decode(s.encode()).decode());"`
        echo "[-]第${i}次解密结果:$passDstr"
    done
}

b64Code 123456 10
echo ""
deCode $passauth 10

执行效果如下:

[+]第1次加密结果:MTIzNDU2
[+]第2次加密结果:TVRJek5EVTI=
[+]第3次加密结果:VFZSSmVrNUVWVEk9
[+]第4次加密结果:VkZaU1NtVnJOVVZXVkVrOQ==
[+]第5次加密结果:VmtaYVUxTnRWbkpPVlZaWFZrVnJPUT09
[+]第6次加密结果:Vm10YVlWVXhUblJXYmtwUFZsWmFXRlpyVm5KUFVUMDk=
[+]第7次加密结果:Vm0xMFlWbFdWWGhVYmxKWFltdHdVRlpzV21GWFJscHlWbTVLVUZWVU1Eaz0=
[+]第8次加密结果:Vm0weE1GbFdiRmRXV0doVllteEtXRmx0ZEhkVlJscHpWMjFHV0ZKc2NIbFdiVFZMVlVaV1ZVMUVhejA9
[+]第9次加密结果:Vm0wd2VFMUdiRmRpUm1SWFYwZG9WbGx0ZUV0WFJteDBaRWhrVmxKc2NIcFdNakZIVjBaS2MyTkliRmRpVkZaTVZsVmFWMVpWTVVWaGVqQTk=
[+]第10次加密结果:Vm0wd2QyVkZNVWRpUm1ScFVtMVNXRll3Wkc5V2JHeDBaVVYwV0ZKdGVEQmFSV2hyVm14S2MyTkljRmROYWtaSVZqQmFTMk15VGtsaVJtUnBWa1phVFZac1ZtRldNVnBXVFZWV2FHVnFRVGs9

[-]第1次解密结果:Vm0wd2VFMUdiRmRpUm1SWFYwZG9WbGx0ZUV0WFJteDBaRWhrVmxKc2NIcFdNakZIVjBaS2MyTkliRmRpVkZaTVZsVmFWMVpWTVVWaGVqQTk=
[-]第2次解密结果:Vm0weE1GbFdiRmRXV0doVllteEtXRmx0ZEhkVlJscHpWMjFHV0ZKc2NIbFdiVFZMVlVaV1ZVMUVhejA9
[-]第3次解密结果:Vm0xMFlWbFdWWGhVYmxKWFltdHdVRlpzV21GWFJscHlWbTVLVUZWVU1Eaz0=
[-]第4次解密结果:Vm10YVlWVXhUblJXYmtwUFZsWmFXRlpyVm5KUFVUMDk=
[-]第5次解密结果:VmtaYVUxTnRWbkpPVlZaWFZrVnJPUT09
[-]第6次解密结果:VkZaU1NtVnJOVVZXVkVrOQ==
[-]第7次解密结果:VFZSSmVrNUVWVEk9
[-]第8次解密结果:TVRJek5EVTI=
[-]第9次解密结果:MTIzNDU2
[-]第10次解密结果:123456

实际应用

例如快速执行sql文件时,我们在shell脚本中只需要写上加密后的串,并附带解密函数:

#!/bin/bash
  
function deCode()
{
    #参数1: 加密串内容
    passDstr=$1
    #参数2: 密码解析次数
    for i in `seq 1 $2`
    do
        passDstr=`echo $passDstr |python -c "import base64;s=input(); print(base64.b64decode(s.encode()).decode());"`
    done
}
#使用加密10次的密文
mysqlPass="Vm0wd2QyVkZNVWRpUm1ScFVtMVNXRll3Wkc5V2JHeDBaVVYwV0ZKdGVEQmFSV2hyVm14S2MyTkljRmROYWtaSVZqQmFTMk15VGtsaVJtUnBWa1phVFZac1ZtRldNVnBXVFZWV2FHVnFRVGs9"
deCode $mysqlPass 10
mysql -uroot -p${passDstr} -e "show databases;"

执行结果如下:

mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

当然实际上如果能改脚本,加一个echo密码就出来了....这篇文章只是让我们在日常工作中隐藏明文密码,以避免不必要的系统风险。

你可能感兴趣的:(Linux运维,自动化,安全,linux,运维)