Вопрос или проблема
У меня проблемы с SSH без пароля. Я проверил, перепроверил и снова проверил, что всё настроено правильно.
Обе машины работают на RHEL6, и когда целевая машина впервые загружается, SSH без пароля не работает. Если я остановлю SSH (service sshd stop или /etc/init.d/sshd stop), а затем запущу его напрямую (/usr/sbin/sshd), SSH без пароля работает нормально.
Если я запускаю SSH через службу (service sshd start или /etc/init.d/sshd start), SSH без пароля не работает.
Просто для тестирования я пробовал закомментировать всю функцию start() в /etc/init.d/sshd и заменить её на /usr/sbin/sshd – это всё равно не позволяет использовать SSH без пароля. Я полагаю, что это означает, что что-то в файле /etc/init.d/sshd вызывает проблему, но я недостаточно разбираюсь в Linux, чтобы сузить проблему.
Похоже, версия init.d запускается с другим серверным ключом, который не распознается, но это должно выдавать предупреждение на клиенте. Возможно, служба считывает конфигурацию из какого-то другого места. Также возможно, что у вас работает сервис xinetd, который перехватывает входящие соединения на порт 22.
Попробуйте запустить службу описанными методами и посмотрите на разницу в выводе
ps aux | grep [s]shd
Это может дать вам подсказку о том, какой конфигурационный файл используется. Также вы можете перепроверить, что sshd прослушивает порт 22 после его запуска через /etc/init.d/sshd. Это можно сделать с помощью
netstat -ntpl
Или, проверив, что работают “полные” входы с паролем.
Существует разница в том, как они выполняются, проверьте этот CentOS баг. Чтобы исправить это, удалите первую строку “#!/bin/bash” из /etc/init.d/sshd.
.
Ответ или решение
В данной ситуации рассматриваются две команды для управления службой SSH на системах RHEL6: /etc/init.d/sshd start
и /usr/sbin/sshd
. Проблема заключается в том, что при стандартном запуске службы SSH демоном через init.d, беззапросная аутентификация (passwordless SSH) не работает, в то время как прямая запуск /usr/sbin/sshd
позволяет использовать данную функциональность.
Основные различия между командами
-
Стартовые скрипты vs. Прямой запуск демона:
-
/etc/init.d/sshd start: Эта команда запускает скрипт, который обычно предустановлен и выполняет ряд дополнительных действий, таких как настройка окружения и загрузка конфигурационных файлов. Скрипт может содержать переменные, инициализацию определенных параметров и может быть модифицирован администратором системы.
-
/usr/sbin/sshd: Прямой запуск демона SSH, минуя любой процесс предварительной настройки. Это обеспечивает чистую загрузку службы по умолчанию, полагаясь на стандартные параметры и конфигурационные файлы, прописанные в
sshd_config
.
-
-
Проблемы конфигурации:
Причина, по которой беззапросное подключение не функционирует при использовании стартовых скриптов, может быть связана с изменением конфигурационных параметров или некорректными изменениями в самом
/etc/init.d/sshd
. Такой скрипт может, в свою очередь, обращаться к различным конфигурационным файлам или загружать некорректные ключи SSH. -
Возможная проблема с использованием ключей:
Если при запуске любым из методов использовать разные SSH-ключи, это может быть ключевой причиной неисправности. Обычно, при изменении ключей, клиентское устройство должно получать предупреждение. Но если этого не происходит, причина может быть, в некорректной обработке ключей в конфигурации.
Предложения по устранению проблем
-
Анализ процесса:
- Используйте
ps aux | grep [s]shd
, чтобы сравнить, какие процессы запускаются в каждом случае. Это поможет выявить различия в параметрах запуска или конфигурируемых файлах.
- Используйте
-
Мониторинг сетевых соединений:
- Запустите
netstat -ntpl
, чтобы убедиться, чтоsshd
слушает на порте 22, и проверьте, что он правильно принимает подключения без пароля.
- Запустите
-
Изменение скрипта init.d:
- Согласно упомянутой ошибке (CentOS Bug), попробуйте удалить строку
#!/bin/bash
из файла/etc/init.d/sshd
. Это может решить проблемы, связанные с неправильной интерпретацией команд или окружения.
- Согласно упомянутой ошибке (CentOS Bug), попробуйте удалить строку
Технические рекомендации
-
Комплексная проверка конфигураций: Проверьте все пути конфигурационных файлов и убедитесь, что все параметры в конфигурации
/etc/ssh/sshd_config
соответствуют требованиям системы, особенно параметры, относящиеся к аутентификации и ключам. -
Анализ xinetd: Дополнительно проверьте наличие и конфигурацию любых служб
xinetd
, которые могут перехватывать подключение к порту 22.
Таким образом, предлагаем провести всесторонний анализ конфигурации и поведения службы при разных способах запуска, устранив все возможные конфликты в скриптах и параметрах.