隐藏/encryptionbash文件中的密码以防止意外看到它

对不起,如果这之前已经问过,我没有检查,但找不到任何东西…

在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) 

我希望这有帮助。

另一个解决方案,不考虑安全性(我也认为最好将凭据保存在另一个文件或数据库中)是使用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 

上面的安装命令会为你做什么是:

  1. 将脚本的加密版本安装到/ var / tmp / KINGLAZY / SHIELDX-(your-script-name)目录中。
  2. 它将链接到这个加密的脚本,无论你指定哪个目录替换/ home /(你的用户名) – 这样,它可以让你轻松访问脚本,而不必键入绝对路径。
  3. 确保没有人可以修改脚本 – 任何尝试修改加密的脚本将使其无法操作…直到这些尝试被停止或删除。 它甚至可以配置为通知你,只要有人试图用脚本来做任何事情,而不是运行它…即黑客或修改尝试。
  4. 确保绝对没有人可以复制它。 没有人可以将您的脚本复制到一个僻静的地方,并尝试拧它,看看它是如何工作的。 脚本的所有副本必须链接到您在安装期间指定的原始位置(步骤4)。

注意:

这不适用于提示并等待用户回复的交互式脚本。 应该将用户期望的值硬编码到脚本中。 加密确保没有人能真正看到这些值,所以你不必担心。

关系:

在这篇文章中提供的解决方案解答您的问题,它加密了包含您想要加密的密码的实际脚本。 您可以按原样(未加密)保留密码,但是密码所在的脚本深度混淆且加密,您可以放心,无人能够看到它。 如果试图撬入脚本,您将收到关于它们的电子邮件通知。

  • 将它从您的屏幕边缘缩进(假设您不使用换行符,并且编辑器宽度一致)

要么

  • 将其存储在单独的文件中并读入。

上面的代码中的以下行不起作用

 DB_PASSWORD=$(eval echo ${DB_PASSWORD} | base64 --decode) 

正确的线是:

 DB_PASSWORD=`echo $PASSWORD|base64 -d` 

并将密码保存在其他文件中作为密码。