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

Используйте sshpass для неинтерактивного входа по SSH в скриптах

Автоматизация паролей SSH с помощью sshpass в сценариях оболочки в Linux и Unix

В этом руководстве мы узнаем, что такое утилита sshpass, как установить sshpass в системах Linux и FreeBSD и как использовать sshpass для неинтерактивного входа по SSH в сценариях оболочки в Linux и Unix.

Введение

Как системному администратору Linux вам может потребоваться доступ к удаленным компьютерам и передача файлов между ними несколько раз в день. Один из способов доступа к удаленной системе — ssh. Двумя наиболее часто используемыми методами аутентификации SSH являются метод аутентификации на основе пароля и метод аутентификации на основе ключа.

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

Что такое sshpass?

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

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

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

Утилита sshpass доступна в репозиториях по умолчанию многих дистрибутивов Linux. Например, вы можете использовать следующую команду для установки sshpass в Arch Linux и его вариантах, таких как EndeavourOS и Manjaro Linux:

sudo pacman -S sshpass

Установите sshpass в Debian, Ubuntu и его производных:

sudo apt install sshpass

Установите sshpass в Fedora, RHEL, CentOS, AlmaLinux и Rocky Linux:

sudo dnf install sshpass

Установите sshpass в openSUSE:

sudo zypper install sshpass

Чтобы установить sshpass во FreeBSD, выполните следующие команды root пользователя:

cd /usr/ports/security/sshpass/ && make install clean
pkg install sshpass

Предостережение: Все эти методы крайне небезопасны. Все пользователи системы могут увидеть пароль в командах, просто введя команду ps. НЕ РЕКОМЕНДУЕТСЯ использовать эти методы в производстве. Вместо этого лучше использовать аутентификацию SSH на основе ключей.

Используйте sshpass для неинтерактивного входа по SSH.

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

Пример 1. Вход в удаленные системы через ssh с использованием sshpass.

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

Давайте посмотрим примеры для каждого метода.

Укажите пароль в качестве аргумента

Чтобы указать пароль в качестве аргумента, используйте параметр -p, как показано ниже.

sshpass -p <remote-password> ssh remoteuser@ip-address

Пример:

sshpass -p almalinux ssh ostechnix@192.168.1.20

Здесь,

  • -p almalinux — предоставляет пароль (т. е. Ubuntu) для удаленной системы.
  • ostechnix@192.168.1.20 — имя и IP-адрес удаленного пользователя.

Пример вывода:

Last login: Tue Oct 11 12:33:20 2022 from 192.168.1.101
[ostechnix@Almalinux8CT ~]$ 

Используйте sshpass для неинтерактивного входа по SSH.

Вы также можете выполнять команды в удаленной системе, даже не входя в нее.

sshpass -p almalinux ssh ostechnix@192.168.1.20 uname -a

Прочтите следующее руководство, чтобы узнать больше о том, как запускать команды в удаленной системе Linux через SSH.

  • Выполнение команд в удаленных системах Linux через SSH

Укажите пароль в качестве переменной среды

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

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

export SSHPASS=almalinux

Затем мы предоставляем пароль с флагом -e, как показано ниже:

sshpass -e ssh ostechnix@192.168.1.20

Вы также можете объединить обе команды и запустить их как одну команду, как показано ниже.

SSHPASS=almalinux sshpass -e ssh ostechnix@192.168.1.20

Этот метод также предоставляет пароль в файл истории, и все пользователи могут просмотреть его с помощью команды history. Чтобы защитить пользователей от просмотра пароля, просто очистите историю bash.

Чтение пароля из текстового файла

Добавьте пароль в текстовый файл с именем mypassword.txt с помощью команды echo:

echo "almalinux" > mypassword.txt

Защитите файл паролей с помощью команды chmod:

chmod 0400 mypassword.txt

Теперь передайте файл паролей в sshpass с флагом -f , как показано ниже:

sshpass -f mypassword.txt ssh ostechnix@192.168.1.20

Зашифровать файл паролей с помощью gpg

В предыдущем примере мы сохранили пароль в текстовом файле с именем «mysshpassword.txt» и передали его с помощью флага -f. Мы также можем зашифровать файл паролей в виде открытого текста с помощью gpg.

Добавьте пароль в текстовый файл с именем mysshpassword с помощью команды echo:

echo "almalinux" > ~/.mysshpassword

Вы заметили, что я поставил точку перед mysshpassword? Это означает, что я спрятал файл паролей в своем каталоге $HOME.

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

gpg -c ~/.mysshpassword

Вам будет предложено ввести парольную фразу в новом всплывающем окне. Дважды введите парольную фразу и нажмите «ОК», чтобы закрыть окно.

Удалите текстовый файл паролей:

rm ~/.mysshpassword

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

gpg -d -q ~/.mysshpassword.gpg | sshpass ssh ostechnix@192.168.1.20 uname -a

Обратите внимание, что приведенная выше команда не будет подключаться к удаленной системе по SSH. Он выполняет только команду «uname -a» в удаленной системе.

Пример 2. Передача файлов с помощью Rsync с sshpass

Чтобы передать файл из локальной системы в удаленную систему с помощью Rsync через SSH, выполните:

rsync ~/file.txt --rsh="sshpass -p almalinux ssh -l ostechnix" 192.168.1.20:/home/ostechnix/

Вы также можете использовать параметр -e, как показано в разделе «Пример 1», чтобы передавать файлы немного менее незащищенным способом.

export SSHPASS=almalinux
rsync ~/file.txt --rsh="sshpass -e ssh -l ostechnix" 192.168.1.20:/home/ostechnix/

Пример 3. Копирование файлов с помощью scp с sshpass

Мы можем использовать sshpass вместе с командой scp для копирования файлов между локальной и удаленной системами в неинтерактивном режиме.

scp ~/file.txt --rsh="sshpass -p almalinux ssh -l ostechnix" 192.168.1.20:/home/ostechnix/

Пример 4. Автоматизация паролей SSH с помощью sshpass в сценариях оболочки

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

Создайте новый скрипт под названием diskusage_sript.sh со следующим содержимым.

#!/usr/bin/env bash

#-------------------------------------------------------
#Author: Ostechnix
#Purpose: Report file system disk space usage of remote systems 
#-------------------------------------------------------
SSHPASS=almalinux sshpass -e ssh ostechnix@192.168.1.20 'df -h'

Запустите скрипт командой:

sh diskusage_sript.sh 

Пример вывода:

Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       20G  1.4G   18G   8% /
none            492K  4.0K  488K   1% /dev
udev             16G     0   16G   0% /dev/tty
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.6M   16G   1% /run
tmpfs           3.1G     0  3.1G   0% /run/user/1000

Используйте sshpass в сценариях оболочки

если вы не хотите помещать пароль в сценарий в виде открытого текста, вы можете просто зашифровать файл паролей с помощью gpg, как показано в разделе «Пример 1», и заменить последнюю строку сценария следующей строкой.

gpg -d -q ~/.mysshpassword.gpg | sshpass ssh ostechnix@192.168.1.20 'df -h'

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

#!/usr/bin/env bash

#-------------------------------------------------------
#Author: Ostechnix
#Purpose: Report file system disk space usage of remote systems 
#-------------------------------------------------------
gpg -d -q ~/.mysshpassword.gpg | sshpass ssh ostechnix@192.168.1.20 'df -h'

Более подробную информацию об использовании sshpass можно найти на странице руководства.

man sshpass

Заключение

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

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

Как я уже предупреждал, использование sshpass в общей системе НЕ рекомендуется. Потому что пароль записывается в историю оболочки, и все пользователи системы могут его просмотреть, просто просмотрев файл истории bash.

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

Ссылка:

Статьи по данной тематике