SSH-соединение всегда запрашивает пароль

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

Я работаю с кластером 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-авторизацией

  1. Конфигурация SSH-сервера:
    Убедитесь, что в конфигурационном файле SSH-сервера (/etc/ssh/sshd_config) параметр PubkeyAuthentication установлен в yes. Этот параметр отвечает за использование ключей, и если он установлен в no, то SSH не сможет использовать открытые ключи для аутентификации.

    PubkeyAuthentication yes
  2. Ключи SSH:
    Проверьте, правильно ли сгенерированы и скопированы ключи SSH. Чтобы убедиться в этом, выполните команду для копирования ключа на целевую машину:

    ssh-copy-id user@host

    Если у вас возникли проблемы с копированием, попробуйте заново сгенерировать пару ключей:

    ssh-keygen -t rsa

    После этого повторно выполните команду ssh-copy-id.

  3. Настройка конфигурации клиента:
    Чтобы избежать бесконечного редактирования файла /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-адреса и укажите ваше имя пользователя на всех машинах.

  4. Права на ключи:
    Убедитесь, что права на файлы ключей корректны. Например, приватный ключ должен иметь права доступа 600:

    chmod 600 ~/.ssh/id_rsa

    Также убедитесь, что папка ~/.ssh имеет права 700.

  5. Настройка аутентификации по паролю:
    Для повышения безопасности рекомендуется отключить аутентификацию по паролю в файле 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-аутентификацией и обеспечить бесперебойное функционирование вашего кластерного решения.

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

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