Всегда рекомендуется использовать зашифрованные пароли в скриптах 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-скрипта.