How to Use Encrypted Password in Linux Bash Shell Script

有时候在 shell 脚本中,我们需要远程用户的密码,比如:连接到远程系统,ftp 用户和代理用户等。在 Linux shell 脚本中,始终建议使用加密密码。

在本文中,我们将介绍如何使用 openssl 命令加密密码,了解如何在 shell 脚本中使用这个加密的密码。

使用 Openssl 加密密码

假设我们在 shell 脚本中使用密码通过 ssh 连接到远程系统,请在 linux 系统中使用下面的 openssl 命令。

$ echo "Passw0rD@#2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \ 
-salt -pass pass:Secret@123#

注意:“Passw0rD@#2”是我们要加密的密码字符串,“Secret@123#”是加密过程中使用的密码。如果 openssl 版本小于 1.1.0,则忽略选项 “-pbkdf2 -iter 100000”

使用以下命令将加密后的密码保存到文件中

$ echo "Passw0rD@#2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \
-salt -pass pass:Secret@123# > secret.txt

使用 chmod 命令设置 secret.txt 文件的权限

$ chmod 600 secret.txt

使用 Openssl 解密密码

要解密密码,请运行下面的命令

$ cat secret.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 \
 -salt -pass pass:Secret@123#
Passw0rD@#2
$

在 Bash Shell 脚本中使用加密密码

使用下面的示例 shell 脚本,它将在通过 ssh 连接到远程系统时使用加密的密码。

$ vi sample.sh
#!/bin/bash
USERNAME=devops
PASSWD=`cat secret.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 \ 
-iter 100000 -salt -pass pass:Secret@123#`

REMOTE=10.20.0.20

sshpass -p $PASSWD ssh -o StrictHostKeyChecking=no $USERNAME@$REMOTE \
 'dmesg -Tx | grep -i error' > /tmp/a.tmp

保存并关闭文件,让脚本可执行

$ chmod +x sample.sh

现在运行脚本,验证能否成功连接到远程系统。

[devops@host1 ~]$ ./sample.sh
Or
[devops@host1 ~]$ bash -x sample.sh
+ USERNAME=devops
++ openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt \ 
-pass pass:Secret@123#
++ cat secret.txt
+ PASSWD=Passw0rD@#2
+ REMOTE=10.20.0.20
+ sshpass -p Passw0rD@#2 ssh -o StrictHostKeyChecking=no devops@10.20.0.20 \ 
'dmesg -Tx | grep -i error'

上面的输出确认在执行过程中加密被解密。

验证 /tmp/a.tmp 文件的内容。

[devops@host1 ~]$ cat /tmp/a.tmp
kern  :info  : [Thu Jun  3 13:36:51 2021] RAS: Correctable Errors collector\
 initialized.
kern  :err   : [Thu Jun  3 13:36:53 2021] [drm:vmw_host_log [vmwgfx]] *ERROR*\ 
 Failed to send log
kern  :err   : [Thu Jun  3 13:36:53 2021] [drm:vmw_host_log [vmwgfx]] *ERROR* \
 Failed to send log
[devops@host1 ~]$

上面的输出确认脚本能够捕获 dmesg 命令的输出。

我的开源项目

酷瓜云课堂-开源知识付费解决方案


鸠摩智首席音效师
475 声望9 粉丝

身强体健,龙精虎猛的活着。