SSH — важный инструмент, который я всегда использую как разработчик и системный администратор. Это позволяет мне безопасно получать удаленный доступ к серверам и управлять ими, что невероятно полезно для устранения неполадок, отладки и развертывания нового кода.
Однако иногда что-то может пойти не так. Одна из самых неприятных ошибок, с которыми я сталкивался, — это ошибка «sshd no hostkeys available». Когда это происходит, я не могу подключиться к серверу SSH, что может быть серьезной проблемой.
Вот почему важно знать, как решить эту проблему быстро и эффективно. В этой статье я объясню, что вызывает эту ошибку, и покажу вам различные решения, которые помогут вам быстро вернуться к работе.
Причины отсутствия ключей хоста sshd
Прежде чем мы сможем исправить ошибку «sshd нет доступных ключей хоста», важно понять, почему это происходит в первую очередь. SSH использует ключи хоста для проверки подлинности сервера, к которому вы подключаетесь.
Эти ключи генерируются при установке SSH на сервере и используются каждый раз, когда клиент подключается к этому серверу. Когда клиент подключается, SSH сверяет ключ хоста с файлом known_hosts, чтобы убедиться, что он подключается к нужному серверу.
Если ключ хоста недоступен или не может быть проверен, вы получите сообщение об ошибке «sshd no hostkeys available».
Существует несколько различных причин, по которым может возникнуть эта ошибка. Иногда, ключ хоста еще не сгенерированчто означает, что SSH не на что проверять.
В других случаях ключ хоста мог быть удален или утерян, что также может вызвать ошибку.
Наконец, права доступа к файлам также могут быть фактором — если у файла author_keys или каталога .ssh нет правильных разрешений, SSH не сможет правильно получить доступ к ключу хоста.
Как исправить sshd, нет доступных ключей хоста
Решение 1. Создайте новые ключи хоста
- Войдите на свой сервер, используя пользователя без полномочий root с привилегиями sudo.
- Откройте окно терминала и выполните следующую команду, чтобы сгенерировать новый ключ хоста RSA:
sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
- Вам будет предложено ввести парольную фразу. Вы можете оставить это поле пустым, если хотите, но его добавление обеспечит дополнительный уровень безопасности.
- Ключ будет сгенерирован и сохранен в указанном месте.
- Затем выполните следующую команду, чтобы сгенерировать новый ключ хоста DSA:
sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
- Вам будет предложено ввести парольную фразу. Вы можете использовать тот же ключ, который вы использовали для предыдущего ключа, или создать новый.
- Выполните следующую команду, чтобы сгенерировать новый ключ хоста ECDSA:
sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
- Вам будет предложено ввести парольную фразу. Вы можете использовать тот же ключ, который вы использовали для предыдущего ключа, или создать новый.
- Наконец, выполните следующую команду, чтобы сгенерировать новый ключ хоста ED25519:
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
- Теперь, когда вы сгенерировали все четыре ключа, перезапустите службу SSH на своем сервере, запустив
sudo service ssh restart
Поздравляем! Вы успешно сгенерировали новые ключи хоста, которые должны исправить ошибку «sshd no hostkeys available».
Решение 2. Скопируйте ключи хоста с другого сервера
- Войдите на сервер с рабочими ключами хоста.
- Откройте окно терминала и перейдите в каталог сохраненных ключей хоста. В системах на основе Ubuntu это обычно
/etc/ssh
.
cd /etc/ssh
- Выполните следующую команду, чтобы отобразить открытый ключ:
sudo cat ssh_host_rsa_key.pub
- Выделите и скопируйте весь открытый ключ, отображаемый в терминале.
- Теперь войдите на сервер, на котором возникла ошибка «sshd no hostkeys available».
- Откройте окно терминала и перейдите в каталог, где хранятся ключи хоста — опять же, обычно это
/etc/ssh.
cd /etc/ssh
- Используйте предпочитаемый вами текстовый редактор, чтобы открыть
ssh_host_rsa_key.pub
файл.
sudo nano ssh_host_rsa_key.pub
- Вставьте открытый ключ, скопированный с другого сервера, в этот файл.
- Сохраните и закройте файл.
- Повторите шаги выше с
ssh_host_dsa_key.pub
,ssh_host_ecdsa_key.pub
иssh_host_ed25519_key.pub
файлы. - После добавления всех четырех открытых ключей в соответствующие файлы на новом сервере перезапустите службу SSH, запустив
sudo service ssh restart
Готово! Теперь новый сервер должен иметь работающие ключи хоста и больше не будет возникать ошибка «sshd no hostkeys available».
Решение 3. Проверка прав доступа к файлам
- Войдите на свой сервер, используя пользователя без полномочий root с привилегиями sudo.
- Откройте окно терминала и перейдите к
.ssh
каталог в вашей домашней папке, запустив
cd ~/.ssh
- Проверьте права доступа к файлам
authorized_keys
файл, запустив
ls -la authorized_keys
- Вывод должен выглядеть примерно так:
-rw------- 1 user user 12345 Sep 9 10:20 authorized_keys
Если права доступа к файлам различаются, это может быть причиной ошибки «sshd no hostkeys available».
- Чтобы это исправить, измените права доступа к файлу, запустив
chmod 600 authorized_keys
- Далее проверьте права доступа к файлу
.ssh
сам каталог, запустив
ls -la ~/.ssh
- Вывод должен выглядеть примерно так
drwx------ 2 user user 4096 Sep 9 10:20 .ssh/
Если права доступа к каталогу различаются, это также может быть причиной ошибки.
- Чтобы это исправить, измените права доступа к каталогу, запустив
chmod 700 ~/.ssh
- Наконец, перезапустите службу SSH на вашем сервере, запустив
sudo service ssh restart
Вы успешно проверили и скорректировали права доступа к файлам для .ssh
каталог и authorized_keys
файл, который должен исправить ошибку «sshd no hostkeys available».
Заключение
Ошибка «sshd no hostkeys available» может быть неприятной проблемой, но несколько различных решений могут помочь вам быстро вернуться к работе. Вы можете легко найти и устранить проблему, создав новые ключи хоста, скопировав ключи хоста с другого сервера или проверив и настроив права доступа к файлам.
Всегда полезно поддерживать конфигурацию SSH в актуальном состоянии и следить за тем, чтобы ваши ключи хоста правильно генерировались и хранились. Это может помочь предотвратить подобные проблемы в первую очередь.
Если у вас есть какие-либо вопросы или вам нужна дополнительная помощь, напишите в комментариях ниже.