对不起,如果这之前已经问过,我没有检查,但找不到任何东西…
在Unix中有一个函数来encryption和解密一个batch file中的密码,这样我就可以将它传送到bash文件中的其他命令中了吗?
我意识到这样做并不提供真正的安全性,如果他们正在查看我的肩膀上的脚本,更多的是阻止某人意外地看到密码:)
我在Red Hat 5.3上运行。
我有一个脚本,做了类似这样的事情:
serverControl.sh -u admin -p myPassword -c shutdown
我想要做这样的事情:
password = decrypt("fgsfkageaivgea", "aDecryptionKey") serverControl.sh -u admin -p $password -c shutdown
这不会以任何方式保护密码,但会阻止某人意外地看到我的肩膀。
OpenSSL提供了一个passwd命令,可以加密,但不解密,因为它只是散列。 您也可以下载类似aesutil的东西,以便您可以使用功能强大且众所周知的对称加密程序。
例如:
#!/bin/sh # using aesutil SALT=$(mkrand 15) # mkrand generates a 15-character random passwd MYENCPASS="i/b9pkcpQAPy7BzH2JlqHVoJc2mNTBM=" # echo "passwd" | aes -e -b -B -p $SALT MYPASS=$(echo "$MYENCPASS" | aes -d -b -p $SALT) # and usage serverControl.sh -u admin -p $MYPASS -c shutdown
我用base64来克服同样的问题,即人们可以看到我的肩膀上的密码。
这是我所做的 – 我创建了一个新的“db_auth.cfg”文件,并创建了一个参数,其中一个是我的数据库密码。 我为该文件设置权限为750。
DB_PASSWORD=Z29vZ2xl
在我的shell脚本中,我使用“source”命令来获取文件,然后将其解码以便在脚本中使用。
source path_to_the_file/db_auth.cfg DB_PASSWORD=$(eval echo ${DB_PASSWORD} | base64 --decode)
我希望这有帮助。
您应该能够使用crypt , mcrypt或gpg来满足您的需求。 他们都支持一些算法。 crypt虽然有点过时了。
更多信息:
另一个解决方案,不考虑安全性(我也认为最好将凭据保存在另一个文件或数据库中)是使用gpg加密密码并将其插入到脚本中。
我使用一个无密码的gpg密钥对,我保留在USB中。 (注意:当你导出这个密钥对时,不要使用–armor,以二进制格式导出它们)。
首先加密你的密码:
echo -n "pAssw0rd" | gpg --armor --no-default-keyring --keyring /media/usb/key.pub --recipient someone@mail.com --encrypt
这将在标准输出中打印出gpg加密的密码。 复制整个消息并将其添加到脚本中:
password=$(gpg --batch --quiet --no-default-keyring --secret-keyring /media/usb/key.priv --decrypt <<EOF -----BEGIN PGP MESSAGE----- hQEMA0CjbyauRLJ8AQgAkZT5gK8TrdH6cZEy+Ufl0PObGZJ1YEbshacZb88RlRB9 h2z+s/Bso5HQxNd5tzkwulvhmoGu6K6hpMXM3mbYl07jHF4qr+oWijDkdjHBVcn5 0mkpYO1riUf0HXIYnvCZq/4k/ajGZRm8EdDy2JIWuwiidQ18irp07UUNO+AB9mq8 5VXUjUN3tLTexg4sLZDKFYGRi4fyVrYKGsi0i5AEHKwn5SmTb3f1pa5yXbv68eYE lCVfy51rBbG87UTycZ3gFQjf1UkNVbp0WV+RPEM9JR7dgR+9I8bKCuKLFLnGaqvc beA3A6eMpzXQqsAg6GGo3PW6fMHqe1ZCvidi6e4a/dJDAbHq0XWp93qcwygnWeQW Ozr1hr5mCa+QkUSymxiUrRncRhyqSP0ok5j4rjwSJu9vmHTEUapiyQMQaEIF2e2S /NIWGg== =uriR -----END PGP MESSAGE----- EOF)
这样,只有在系统中安装了USB才能解密密码。 当然,您也可以将密钥导入到系统中(安全性较低,或者根本没有安全性),或者您可以使用密码保护私钥(所以不能自动)。
有一个更方便的方式来存储密码在脚本中,但你将不得不加密和混淆脚本,以便它不能被读取。 为了成功地加密和混淆shell脚本,并且实际上可以执行该脚本,请尝试在此处复制并粘贴该脚本:
http://www.kinglazy.com/shell-script-encryption-kinglazy-shieldx.htm
在上面的页面中,你所要做的就是提交你的脚本,给脚本一个合适的名字,然后点击下载按钮。 将为您生成一个zip文件。 右键点击下载链接并复制您提供的URL。 然后,转到您的UNIX框并执行以下步骤。
安装:
1. wget link-to-the-zip-file 2. unzip the-newly-downloaded-zip-file 3. cd /tmp/KingLazySHIELD 4. ./install.sh /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username) -force
上面的安装命令会为你做什么是:
注意:
这不适用于提示并等待用户回复的交互式脚本。 应该将用户期望的值硬编码到脚本中。 加密确保没有人能真正看到这些值,所以你不必担心。
关系:
在这篇文章中提供的解决方案解答您的问题,它加密了包含您想要加密的密码的实际脚本。 您可以按原样(未加密)保留密码,但是密码所在的脚本深度混淆且加密,您可以放心,无人能够看到它。 如果试图撬入脚本,您将收到关于它们的电子邮件通知。
要么
上面的代码中的以下行不起作用
DB_PASSWORD=$(eval echo ${DB_PASSWORD} | base64 --decode)
正确的线是:
DB_PASSWORD=`echo $PASSWORD|base64 -d`
并将密码保存在其他文件中作为密码。