🐧 Как использовать зашифрованный пароль в скриптах Bash

Мануал

Всегда рекомендуется использовать зашифрованные пароли в скриптах Linux bash.

Как правило, в скриптах bash shell нам может понадобиться пароль для удаленного пользователя при подключении к удаленной системе, пользователя ftp, пользователя прокси и т.д.

В этой статье мы рассмотрим, как зашифровать пароль с помощью команды openssl, а затем увидим, как этот зашифрованный пароль можно использовать в скриптах  shell.

Шифрование пароля с помощью Openssl

Допустим, мы хотим подключиться к удаленной системе по ssh, используя пароль внутри скрипта оболочки.

Чтобы зашифровать пароль, используйте команду openssl в вашей системе linux.

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

Примечание: Строка, за которой следует команда echo ‘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

Установите следующие права на файл secret.txt с помощью команды chmod:

$ 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
$

Примечание: Если вы внимательно посмотрели, мы использовали опцию ‘-d’ для расшифровки.

Использование зашифрованного пароля в скрипте Bash

Используйте приведенный ниже пример скрипта, который будет использовать зашифрованный пароль при подключении к удаленной системе по 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-скрипта.

 

Добавить комментарий