sshpass: Отличный инструмент для неинтерактивного входа по SSH - Никогда не используйте на рабочем сервере
В большинстве случаев системные администраторы Linux входят на удалённые серверы Linux с помощью SSH, используя либо пароль, либо вход без пароля, либо аутентификацию SSH на основе ключа.
А что если вы хотите предоставить пароль вместе с имя пользователя прямо в запросе SSH? Здесь на помощь приходит sshpass.
sshpass — это простой и легковесный инструмент командной строки, который позволяет нам передавать пароль (неинтерактивную аутентификацию паролем) непосредственно в командную строку, чтобы можно было выполнять автоматизированные shell-скрипты для создания резервных копий через планировщик cron.
SSH использует прямой доступ к TTY, чтобы убедиться, что пароль действительно вводится интерактивным пользователем с клавиатуры. Sshpass запускает SSH в выделенном TTY, вводя его в заблуждение, заставляя поверить, что пароль поступает от интерактивного пользователя.
style="color: red;">Важно: Использование 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 более надёжен и полезен для целей скриптинга, рассмотрите приведённые ниже примерные команды.
Войдите на удалённый сервер Linux по SSH (10.42.0.1), используя имя пользователя и пароль, и проверьте использование дискового пространства файловой системы удалённой системы, как показано.
$ sshpass -p 'my_pass_here' ssh [email 'df -h'
style="color: red;">Важно: Здесь пароль передается через командную строку, что на практике небезопасно, и использование этой опции не рекомендуется.
Однако, чтобы предотвратить отображение пароля на экране, вы можете использовать флаг -e и ввести пароль как значение переменной окружения SSHPASS, как показано ниже:
$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh [email 'df -h'
style="color: red;">Примечание: В приведенном выше примере переменная окружения SSHPASS используется только временно и будет удалена при перезагрузке.
Чтобы навсегда установить переменную окружения SSHPASS, откройте файл /etc/profile и введите команду export в начале файла:
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.
Пожалуйста, оставьте вопрос или комментарий через раздел обратной связи ниже для любых дальнейших обсуждений.


