Как я могу подключиться к удалённому серверу по SSH с автоматизированным паролем и без ключа?

Вопрос или проблема

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

Так как лучше всего это сделать? Как насчет использования sshpass?

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

Если вы не можете обмениваться открытыми ключами, я предлагаю использовать expect. Вам нужно будет обеспечить файл exp, содержащий ваш пароль. Он будет храниться на вашем жестком диске, поэтому любой пользователь с доступом sudo или root сможет его взломать. Но, по крайней мере, это действительно более безопасно, чем sshpass.

Вот как это сделать

ИЗМЕНЕНИЕ

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

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

SSHPASS='пароль'
  sshpass -e ваши команды здесь

1. Установите sshpass

Это очень полезная программа, которая позволяет вам передавать пароль ssh как параметр командной строки. Это, очевидно, не очень безопасное решение, и я настоятельно рекомендую вам прочитать раздел “Соображения безопасности” в man sshpass.

Тем не менее, она, вероятно, доступна в репозиториях вашей дистрибутивы, в системах на основе Debian её можно установить с помощью

sudo apt-get install sshpass

Я не могу проверить, так как у меня нет машины на базе RedHat, но, судя по тому, что я искал здесь, она должна быть установлена на Fedora с помощью

sudo yum install sshpass

После установки вы можете просто выполнить

SSHPASS='пароль'
  sshpass -e ваши команды

Опция -e говорит sshpass получить пароль из переменной SSHPASS. Это немного безопаснее, чем передавать его как параметр с помощью опции -p.

ВАЖНО:

Это завершится неудачей без вывода ошибок, если сервер, к которому вы подключаетесь, неизвестен, если его открытый ключ не сохранен на вашем компьютере. Если это не работает, просто один раз подключитесь (ssh или scp) к удаленной машине и примите ее открытый ключ.

Ссылки

скрипт для автоматизации scp в сети

Как уже описано в других ответах, я также использую sshpass, но комбинирую его с командой read, чтобы хранить свой пароль во временной переменной окружения. Таким образом, мой пароль никогда не записывается в открытом виде. Вот однострочная команда, которую я использую:

read -s PASS; sshpass -p $PASS ssh <пользователь>@<адрес хоста>

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

Ответ или решение

SSH (Secure Shell) предоставляет безопасный способ доступа к удалённым серверам, однако в некоторых ситуациях может возникнуть необходимость автоматизировать подключение с использованием пароля. Ваша проблема заключается в том, что аутентификация по публичным ключам отклоняется удалённой системой. В этом случае есть несколько методов, которые можно использовать для достижения автоматизации.

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

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

Для Debian и Ubuntu:

sudo apt-get install sshpass

Для Fedora:

sudo yum install sshpass

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

SSHPASS='ваш_пароль' sshpass -e ssh user@host

Опция -e указывает sshpass использовать переменную окружения SSHPASS для чтения пароля. Это немного безопаснее, чем передача пароля как параметра с помощью опции -p. Однако стоит отметить, что если злоумышленник имеет доступ к вашему сеансу, он может перехватить пароль.

Важные моменты

  1. Проверка ключа сервера: Если вы пытаетесь подключиться к серверу первый раз, команду исключит, если ключ сервера не был принят ранее. Чтобы избежать этой проблемы, вы можете сначала вручную подключиться к серверу:
ssh user@host

Это позволит сохранить ключ сервера и избежать ошибок при автоматизации.

  1. Риски безопасности: Использование sshpass не рекомендуется в случае, если к вашему серверу имеет доступ несколько пользователей, так как любой из них сможет увидеть ваш пароль.

2. Использование expect

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

#!/usr/bin/expect
set timeout 20
set user "ваш_пользователь"
set password "ваш_пароль"
set host "адрес_сервера"

spawn ssh $user@$host
expect "password:"
send "$password\r"
interact

Этот скрипт нужно сохранить в файл, например ssh_login.sh, и сделать его исполняемым с помощью:

chmod +x ssh_login.sh

Таким образом, вы можете запустить скрипт, и он автоматически выполнит вход на удалённый сервер.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...