Вопрос или проблема
Я работаю с кластером Hadoop с несколькими узлами, поэтому узлы общаются по SSH. Вот моя проблема:
- У меня есть 3 компьютера, подключенных к одному роутеру
- Этот роутер иногда перезапускается, поэтому IP-адреса машин могут измениться
- Каждый раз, когда это происходит, я редактирую файл
/etc/hosts
, обновляя IP-адреса машин, названные (master
,slave1
,slave2
), и в нём говорится, что эта машина будет добавлена.
Сначала, когда я настраивал SSH, генерируя ключ и копируя его на другие машины, всё работало отлично, я мог использовать ssh slave1
с master и входить без запроса пароля:
- Я отредактировал файл
sshd_config
и изменилPubkeyAuthentication
наno
- Пытался заново сгенерировать ssh-ключ и использовал
ssh-copy-id
, чтобы снова скопировать его на другие компьютеры (что-то вродеssh-copy-id ~/.ssh/id_rsa.pub user@host
на всех компьютерах)
Мне удобно вручную изменять IP-адрес, потому что у меня были большие проблемы с попытками сделать IP-адрес статическим, но мне нужно использовать ssh host
без запроса пароля.
Вам нужно установить PubkeyAuthentication
в yes
в sshd_config
(на сервере), чтобы использовать ключи, которые вы скопировали.
(Как только это будет работать, вам также следует отключить пароли с помощью PasswordAuthentication no
, чтобы предотвратить перебор паролей).
Вместо редактирования /etc/hosts
(что требует прав суперпользователя) вы можете отредактировать или создать конфигурацию пользователя ~/.ssh/config
. (Это относится только к ssh). Она будет выглядеть примерно так:
Host slave1
Hostname 192.168.1.101
User bob
IdentityFile ~/.ssh/id_rsa
PubkeyAuthentication yes
Host slave2
Hostname 192.168.1.102
User bobby
Host master
Hostname 192.168.1.100
User admin
Замените 192.x.x.x
на ваши адреса и измените по своему усмотрению (man ssh_config
будет отличной помощью здесь).
С этим вы сможете ввести ssh slave1
и применять все настройки.
sshd_config
настраивает SSH сервер, а ssh_config
настраивает SSH клиент (для всех пользователей) и для конкретного пользователя в ~/.ssh/config
.
Проблему с изменением IP-адресов лучше обсудить в отдельном вопросе, но я бы посоветовал посмотреть на блокировку DHCP-аренд (если у вас есть доступ к роутеру), проверить возможность добавления inform 192.168.1.101
в /etc/dhcpcd.conf
(если вы используете dhcpcd) или ещё раз попробовать установить статические IP-адреса.
Ответ или решение
SSH-соединение постоянно запрашивает пароль: решения и рекомендации
Проблема с постоянным запросом пароля при подключении по SSH может возникнуть по множеству причин, особенно в контексте кластерной архитектуры, такой как ваша установка Hadoop. Давайте рассмотрим ключевые факторы, которые могут влиять на эту ситуацию, и способы их устранения.
Основные проблемы с SSH-авторизацией
-
Конфигурация SSH-сервера:
Убедитесь, что в конфигурационном файле SSH-сервера (/etc/ssh/sshd_config
) параметрPubkeyAuthentication
установлен вyes
. Этот параметр отвечает за использование ключей, и если он установлен вno
, то SSH не сможет использовать открытые ключи для аутентификации.PubkeyAuthentication yes
-
Ключи SSH:
Проверьте, правильно ли сгенерированы и скопированы ключи SSH. Чтобы убедиться в этом, выполните команду для копирования ключа на целевую машину:ssh-copy-id user@host
Если у вас возникли проблемы с копированием, попробуйте заново сгенерировать пару ключей:
ssh-keygen -t rsa
После этого повторно выполните команду
ssh-copy-id
. -
Настройка конфигурации клиента:
Чтобы избежать бесконечного редактирования файла/etc/hosts
, вы можете использовать конфигурацию SSH-клиента, создав файл~/.ssh/config
и добавив в него настройки для каждой машины. Это позволит легко подключаться без необходимости указывать IP-адреса каждый раз.Пример конфигурации для трех машин:
Host slave1 Hostname 192.168.1.101 User your_username IdentityFile ~/.ssh/id_rsa Host slave2 Hostname 192.168.1.102 User your_username Host master Hostname 192.168.1.100 User your_username
Замените
192.168.x.x
на текущие IP-адреса и укажите ваше имя пользователя на всех машинах. -
Права на ключи:
Убедитесь, что права на файлы ключей корректны. Например, приватный ключ должен иметь права доступа600
:chmod 600 ~/.ssh/id_rsa
Также убедитесь, что папка
~/.ssh
имеет права700
. -
Настройка аутентификации по паролю:
Для повышения безопасности рекомендуется отключить аутентификацию по паролю в файлеsshd_config
, изменив строку:PasswordAuthentication no
Проблема с изменяющимися IP-адресами
Вы также упомянули о проблемах, связанных с изменением IP-адресов при перезагрузке роутера. Это действительно может создавать дополнительные трудности для подключения по SSH. Вот несколько решений:
-
Статическая IP-адресация: Попробуйте настроить статические IP-адреса для каждого устройства через настройки вашего роутера. Это обеспечит стабильность подключений.
-
DHCP-резервирование: Если вы не хотите настраивать статические IP, проверьте функцию DHCP-рецепиции на роутере. Это позволит вам закрепить IP-адреса за конкретными MAC-адресами устройств.
-
Использование DNS: Если у вас есть возможность настроить DNS-сервер в вашей локальной сети, это также может облегчить процесс управления адресами, так как вам не придется беспокоиться о физических IP-адресах.
Заключение
Для того чтобы подключение через SSH работало без запроса пароля, необходимо убедиться, что правильные ключи SSH сгенерированы и настроены, а конфигурация SSH-сервера и клиента соответствуют требованиям. Помните также о необходимости управления IP-адресами, так как стабильность сетевых подключений напрямую зависит от этого. Например, зафиксированные IP-адреса или использование DHCP-рецепции помогут уменьшить лишние технические затраты на поддержание вашей кластера Hadoop.
Следуя указанным рекомендациям, вы сможете устранить проблемы с SSH-аутентификацией и обеспечить бесперебойное функционирование вашего кластерного решения.