Как использовать зашифрованные пароли в сценариях Bash

Ноутбук Linux в стиле Ubuntu.Фатмавати ачмад дзэнури / Shutterstock.com

Если вы вынуждены использовать сценарий Linux для подключения к защищенному паролем ресурсу, вы, вероятно, почувствуете себя неловко, вставив этот пароль в сценарий. OpenSSL решает эту проблему за вас.

Пароли и скрипты

Помещать пароли в сценарии оболочки — не лучшая идея. На самом деле это действительно плохая идея. Если скрипт попадет в чужие руки, каждый, кто его прочитает, увидит пароль. Но если вы вынуждены использовать сценарий, что еще вы можете сделать?

Вы можете ввести пароль вручную, когда процесс достигнет этой точки, но если сценарий будет запускаться без присмотра, это не сработает. К счастью, есть альтернатива жесткому вводу паролей в скрипт. Как ни странно, для этого используется другой пароль, а также надежное шифрование.

В нашем примере сценария нам нужно установить удаленное соединение с компьютером Fedora Linux с нашего компьютера Ubuntu. Мы будем использовать сценарий оболочки Bash, чтобы установить SSH-соединение с компьютером Fedora. Сценарий должен запускаться автоматически, и мы не хотим указывать в нем пароль для удаленной учетной записи. В этом случае мы не можем использовать ключи SSH, потому что мы делаем вид, что у нас нет никаких прав на контроль или права администратора над компьютером Fedora.

Мы собираемся использовать хорошо известные Набор инструментов OpenSSL для обработки шифрования и утилиты sshpass для ввода пароля в команду SSH.

Установка OpenSSL и sshpass

Поскольку многие другие инструменты шифрования и безопасности используют OpenSSL, он может быть уже установлен на вашем компьютере. Однако, если это не так, установка займет всего несколько минут.

В Ubuntu введите эту команду:

sudo apt get openssl

Чтобы установить sshpass, используйте эту команду:

sudo apt установить sshpass

В Fedora вам нужно ввести:

sudo dnf установить openssl

Команда для установки sshpass:

sudo dnf установить sshpass

В Manjaro Linux мы можем установить OpenSSL с помощью:

sudo pacman -Sy openssl

Наконец, чтобы установить sshpass, используйте эту команду:

sudo pacman -Sy sshpass

Шифрование в командной строке

Прежде чем мы перейдем к использованию команды openssl со сценариями, давайте познакомимся с ней, используя ее в командной строке. Допустим, пароль к учетной записи на удаленном компьютере — ржавый! Herring.pitshaft. Мы собираемся зашифровать этот пароль с помощью openssl.

Когда мы это делаем, нам нужно предоставить пароль для шифрования. Пароль шифрования используется в процессах шифрования и дешифрования. В команде openssl есть множество параметров и опций. Мы рассмотрим каждую из них чуть позже.

эхо «ржавый! сельдь.питшафт» | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass: ‘pick.your.password’

Мы используем echo для отправки пароля удаленной учетной записи через канал и в команду openssl.

Параметры openssl:

  • enc -aes-256-cbc: Тип кодировки. Мы используем 256-битный шифр с ключом Advanced Encryption Standard с цепочкой блоков шифра.
  • -md sha512: тип дайджеста сообщения (хеш). Мы используем криптографический алгоритм SHA512.
  • -a: указывает openssl применять кодировку base-64 после фазы шифрования и перед фазой дешифрования.
  • -pbkdf2: Использование функции получения ключа на основе пароля 2 (PBKDF2) значительно усложняет задачу подбора пароля при атаке методом грубой силы. PBKDF2 требует много вычислений для выполнения шифрования. Злоумышленнику потребуется воспроизвести все эти вычисления.
  • -iter 100000: Устанавливает количество вычислений, которые будет использовать PBKDF2.
  • -salt: использование произвольно применяемого значения соли делает зашифрованный вывод каждый раз другим, даже если простой текст один и тот же.
  • -pass pass: ‘pick.your.password’: пароль, который нам понадобится для расшифровки зашифрованного удаленного пароля. Замените pick.your.password надежным паролем по вашему выбору.

Зашифрованная версия нашего ржавого пароля! Herring.pitshaft записывается в окно терминала.

Зашифрованный пароль, записанный в окно терминала

Чтобы расшифровать это, нам нужно передать эту зашифрованную строку в openssl с теми же параметрами, которые мы использовали для шифрования, но добавив параметр -d (дешифровать).

echo U2FsdGVkX19iiiRNhEsG + wm / uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: ‘pick.your.password’

Строка расшифровывается, и наш исходный текст — пароль для учетной записи удаленного пользователя — записывается в окно терминала.

Расшифрованный пароль, записанный в окно терминала

Это доказывает, что мы можем надежно зашифровать пароль учетной записи удаленного пользователя. Мы также можем расшифровать его, когда он нам понадобится, используя пароль, который мы предоставили на этапе шифрования.

Но действительно ли это улучшает нашу ситуацию? Если нам нужен пароль шифрования для расшифровки пароля удаленной учетной записи, конечно, пароль для дешифрования должен быть в сценарии? Ну да, это так. Но зашифрованный пароль учетной записи удаленного пользователя будет храниться в другом скрытом файле. Права доступа к файлу не позволят никому, кроме вас — и, очевидно, пользователя root системы — получить к нему доступ.

Чтобы отправить вывод команды шифрования в файл, мы можем использовать перенаправление. Файл называется «.secret_vault.txt». Мы изменили пароль шифрования на более надежный.

эхо «ржавый! сельдь.питшафт» | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass: ‘секрет # хранилище! пароль’> .secret_vault.txt

Ничего не видно, но пароль шифруется и отправляется в файл «.secret_vault.txt».

Мы можем проверить, что это работает, расшифровав пароль в скрытом файле. Обратите внимание, что здесь мы используем cat, а не echo.

cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: ‘секрет # хранилище! пароль’

Пароль успешно расшифрован из данных в файле. Мы будем использовать chmod, чтобы изменить права доступа к этому файлу, чтобы никто другой не мог получить к нему доступ.

chmod 600 .secret_vault.txt ls -l .secret_vault.txt

Использование маски разрешений 600 удаляет все права доступа для всех, кроме владельца файла. Теперь мы можем перейти к написанию нашего сценария.

Использование OpenSSL в скрипте

Наш сценарий довольно прост:

#! / bin / bash # имя удаленной учетной записи REMOTE_USER = geek # пароль для удаленной учетной записи REMOTE_PASSWD = $ (cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: ‘secret # vault! Password’) # удаленный компьютер REMOTE_LINUX = fedora-34.local # подключиться к удаленному компьютеру и поместить метку времени в файл с именем script.log sshpass -p $ REMOTE_PASSWD ssh -T $ REMOTE_USER @ $ REMOTE_LINUX << _remote_commands echo $ USER "-" $ (дата) >> /home/$REMOTE_USER/script.log _remote_commands

  • Мы устанавливаем для переменной REMOTE_USER значение geek.
  • Затем мы устанавливаем для переменной REMOTE_PASSWD значение дешифрованного пароля, извлеченного из файла «.secret_vault.txt», используя ту же команду, которую мы использовали только что.
  • Местоположение удаленного компьютера хранится в переменной REMOTE_LINUX.

Имея эту информацию, мы можем использовать команду ssh для подключения к удаленному компьютеру.

  • Команда sshpass — это первая команда в строке подключения. Мы используем его с параметром -p (пароль). Это позволяет нам указать пароль, который следует отправить команде ssh.
  • Мы используем параметр -T (отключить выделение псевдотерминала) с ssh, потому что нам не нужно выделять псевдотерминал на удаленном компьютере.

Мы используем короткий здесь документ передать команду удаленному компьютеру. Все, что находится между двумя строками _remote_commands, отправляется в виде инструкций пользовательскому сеансу на удаленном компьютере — в данном случае это одна строка сценария Bash.

Команда, отправляемая на удаленный компьютер, просто записывает имя учетной записи пользователя и временную метку в файл с именем «script.log».

Скопируйте и вставьте сценарий в редактор и сохраните его в файл с именем «go-remote.sh». Не забудьте изменить данные, чтобы отразить адрес вашего собственного удаленного компьютера, учетную запись удаленного пользователя и пароль удаленной учетной записи.

Используйте chmod, чтобы сделать скрипт исполняемым.

chmod + x go-remote.sh

Осталось только попробовать. Запустим наш скрипт.

./go-remote.sh

Поскольку наш сценарий представляет собой минималистский шаблон для автоматического сценария, на терминал нет вывода. Но если мы проверим файл «script.log» на компьютере с Fedora, мы увидим, что удаленные подключения были успешно выполнены и что файл «script.log» был обновлен с помощью меток времени.

cat script.log

Ваш пароль является личным

Пароль вашей удаленной учетной записи не записан в скрипте.

И хотя пароль для расшифровки является, в сценарии никто другой не может получить доступ к вашему файлу «.secret_vault.txt», чтобы расшифровать его и получить пароль удаленной учетной записи.

Похожие записи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *