如何在Shell中使用加密密码 ?Linux 进阶收藏!

如何在Shell中使用加密密码 ?Linux 进阶收藏!

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 命令的输出。

我的开源项目

如何在Shell中使用加密密码 ?Linux 进阶收藏!

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

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共2条

请登录后发表评论

    暂无评论内容