Автоматизация паролей SSH в Linux с помощью sshpass

Автор: | 20/07/2022

Утилита sshpass упрощает администраторам управление подключениями SSH в сценариях.

Примечание редактора, 29 ноября 2021 г.: Все примеры предоставления пароля в командной строке включают риск того, что пароль будет захвачен в истории оболочки пользователя (если поддерживается) или будет виден всем системным пользователям в списке процессов. Эксперты по безопасности рекомендуют удалить все файлы и очистить журналы оболочки.

Подключение и передача файлов на удаленные системы — это то, чем системные администраторы занимаются постоянно. Одним из важных инструментов, используемых многими системными администраторами на платформах Linux, является SSH. 

SSH поддерживает две формы аутентификации:

  1. Аутентификация по паролю
  2. Аутентификация с открытым ключом

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

Что такое sshpass?

Утилита sshpass предназначена для запуска SSH с использованием режима аутентификации по паролю с интерактивной клавиатурой , но неинтерактивным способом.

SSH использует прямой доступ TTY, чтобы гарантировать, что пароль действительно выдан пользователем интерактивной клавиатуры. sshpass запускает SSH в выделенном TTY, обманывая SSH, заставляя его думать, что он получает пароль от интерактивного пользователя.

Install sshpass

Вы можете установить sshpass с помощью этой простой команды:

# yum install sshpass

Использование sshpass

Укажите команду, которую вы хотите запустить, после sshpass опций. Обычно команда имеет ssh аргументы, но это может быть и любая другая команда. Однако запрос пароля SSH в настоящее время жестко запрограммирован в sshpass.

sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments

-ppassword
Пароль задается в командной строке
-ffilename
Пароль — это первая строка имени файла
-dnumber
номер — это файловый дескриптор, унаследованный sshpass от бегуна. Пароль считывается из дескриптора открытого файла
-e
Пароль берется из переменной окружения "SSHPASS"

Примеры

Чтобы лучше понять значение и использование sshpass, давайте рассмотрим несколько примеров с несколькими различными утилитами, включая SSH, Rsync, Scp и GPG.

Пример 1: SSH

A. Используйте sshpass для входа на удаленный сервер с помощью SSH. Предположим, что пароль !4u2tryhack. Ниже приведены несколько способов использования параметров sshpass.

Используйте -p (это считается наименее безопасным выбором и не должно использоваться):

sshpass -p !4u2tryhack ssh username@host.example.com

Параметр -p выглядит следующим образом при использовании в сценарии оболочки:

sshpass -p !4u2tryhack ssh -o StrictHostKeyChecking=no username@host.example.com

B. Используйте -f опцию (пароль должен быть в первой строке имени файла):

echo '!4u2tryhack' >pass_file 
chmod 0400 pass_file 
sshpass -f pass_file ssh username@host.example.com

Имеет  $ chmod 0400 pass_file решающее значение для обеспечения безопасности файла паролей. Маска umask по умолчанию в RHEL — 033, что обеспечивает доступность файла для чтения во всем мире.

Вот -f вариант при использовании в сценарии оболочки:

sshpass -f pass_file ssh -o StrictHostKeyChecking=no username@host.example.com

C. Используйте -eопцию (пароль должен быть в первой строке имени файла):

SSHPASS='!4u2tryhack' sshpass -e ssh username@host.example.com

Параметр -e при использовании в сценарии оболочки выглядит следующим образом:

SSHPASS='!4u2tryhack' sshpass -e ssh -o StrictHostKeyChecking=no username@host.example.com
Пример 2: R-синхронизация

Используйте sshpass с rsync:

SSHPASS='!4u2tryhack' rsync --rsh="sshpass -e ssh -l username" /custom/ host.example.com:/opt/custom/ 

В приведенном выше примере используется -eопция, которая передает пароль в переменную среды SSHPASS.

Мы можем использовать -f переключатель следующим образом:

rsync --rsh="sshpass -f pass_file ssh -l username" /custom/ host.example.com:/opt/custom/
Пример 3: SCP

Используйте sshpass с scp:

scp -r /var/www/html/example.com --rsh="sshpass -f pass_file ssh -l user" host.example.com:/var/www/html
Пример 4: GPG

Вы также можете использовать sshpass с файлом, зашифрованным GPG. Когда -f переключатель используется, эталонный файл находится в открытом виде. Давайте посмотрим, как мы можем зашифровать файл с помощью GPG и использовать его.

Сначала создайте файл следующим образом:

echo '!4u2tryhack' > .sshpasswd

Далее зашифруйте файл с помощью gpg команды :

gpg -c .sshpasswd

Удалите файл, содержащий открытый текст:

rm .sshpasswd

Наконец, используйте его следующим образом:

gpg -d -q .sshpasswd.gpg | sshpass ssh user@srv1.example.com

Заключение

sshpass это простой инструмент, который может быть очень полезен для системных администраторов. Это никоим образом не отменяет наиболее безопасную форму аутентификации SSH, которая является аутентификацией с открытым ключом. Однако sshpass также можно добавить в набор инструментов системного администратора.

https://www.redhat.com/sysadmin/ssh-automation-sshpass