Вопрос или проблема
У меня есть удаленный сервер. Я планировал использовать открытые ключи для подключения по 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
) к удаленной машине и примите ее открытый ключ.
Ссылки
Как уже описано в других ответах, я также использую 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
. Однако стоит отметить, что если злоумышленник имеет доступ к вашему сеансу, он может перехватить пароль.
Важные моменты
- Проверка ключа сервера: Если вы пытаетесь подключиться к серверу первый раз, команду исключит, если ключ сервера не был принят ранее. Чтобы избежать этой проблемы, вы можете сначала вручную подключиться к серверу:
ssh user@host
Это позволит сохранить ключ сервера и избежать ошибок при автоматизации.
- Риски безопасности: Использование
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
является более безопасным методом, но требует программирования скрипта. В любом случае, при работе с паролями важно уделять внимание безопасности и минимизировать риски утечки конфиденциальной информации.