Утилита sshpass упрощает администраторам управление подключениями SSH в сценариях.
Примечание редактора, 29 ноября 2021 г.: Все примеры предоставления пароля в командной строке включают риск того, что пароль будет захвачен в истории оболочки пользователя (если поддерживается) или будет виден всем системным пользователям в списке процессов. Эксперты по безопасности рекомендуют удалить все файлы и очистить журналы оболочки.
Подключение и передача файлов на удаленные системы — это то, чем системные администраторы занимаются постоянно. Одним из важных инструментов, используемых многими системными администраторами на платформах Linux, является SSH.
SSH поддерживает две формы аутентификации:
- Аутентификация по паролю
- Аутентификация с открытым ключом
Аутентификация с открытым ключом считается наиболее безопасной формой этих двух методов, хотя аутентификация по паролю является самой популярной и простой. Однако при аутентификации по паролю пользователю всегда предлагается ввести пароль. Это повторение утомительно. Кроме того, 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
также можно добавить в набор инструментов системного администратора.