Поиск по сайту:

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


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

Что, если вы хотите указать пароль вместе с имя пользователя самому приглашению SSH? здесь на помощь приходит sshpass.

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

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

Важно: использование sshpass считается наименее безопасным, поскольку оно раскрывает пароль всем пользователям системы в командной строке с помощью простого команда «ps». Я настоятельно рекомендую использовать аутентификацию SSH без пароля.

Установите sshpass в системах Linux

В системах на базе RedHat/CentOS сначала вам необходимо включить репозиторий Epel в вашей системе, чтобы установить его с помощью команды yum, как показано.

yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

В Debian/Ubuntu и его производных вы можете установить его с помощью команды apt-get, как показано.

sudo apt-get install sshpass

Альтернативно, вы можете установить последнюю версию sshpass из исходного кода, сначала загрузив исходный код, а затем извлеките содержимое tar-файла и установите его следующим образом:

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

Как использовать sshpass в Linux

sshpass используется вместе с ssh, вы можете просмотреть все варианты использования sshpass с полным описанием, введя команду ниже:

sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Как я упоминал ранее, sshpass более надежен и полезен для сценариев, рассмотрим примеры команд ниже.

Войдите на удаленный ssh-сервер Linux (10.42.0.1) с именем пользователя и паролем и проверьте использование диска файловой системы удаленной системы, как показано.

sshpass -p 'my_pass_here' ssh [email  'df -h' 

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

Однако, чтобы запретить отображение пароля на экране, вы можете использовать флаг -e и ввести пароль как значение переменной среды SSHPASS, как показано ниже:

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

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

Чтобы навсегда установить переменную среды SSHPASS, откройте файл /etc/profile и введите оператор экспорта в начале файла:

export SSHPASS='my_pass_here'

Сохраните файл и выйдите, затем выполните команду ниже, чтобы изменения вступили в силу:

source /etc/profile 

С другой стороны, вы также можете использовать флаг -f и поместить пароль в файл. Таким образом, вы можете прочитать пароль из файла следующим образом:

sshpass -f password_filename ssh [email  'df -h'

Вы также можете использовать sshpass для передачи файлов с помощью scp или резервного копирования/синхронизации файлов через rsync с использованием SSH, как показано:

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Для более эффективного использования я предлагаю вам прочитать справочную страницу sshpass, набрав:

man sshpass

В этой статье мы объяснили sshpass — простой инструмент, обеспечивающий неинтерактивную аутентификацию по паролю. Хотя эти инструменты могут быть полезны, настоятельно рекомендуется использовать более безопасный механизм аутентификации с открытым ключом ssh.

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