Как отладить входящие соединения SSH?

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

У меня возникли проблемы с подключением к серверу (Ubuntu 16.04) по ssh с моего компьютера (macOS 10.12), к которому у меня есть root-доступ. Ситуация странная: я проверил, что sshd работает на сервере и что порт 22 открыт (sudo netstat -anp | grep sshd), и трафик не блокируется (sudo iptables -L | grep ssh и sudo ufw verbose); hosts.deny также не содержит моего IP-адреса.

Самое странное – я могу войти с другого компьютера без проблем. Когда я запускаю nmap <server-ip> на своем компьютере, он показывает, что только порт 80 открыт; запуск той же команды на другом компьютере показывает только один открытый порт – 22. Я попробовал войти с третьего компьютера – снова не повезло. Не уверен, что происходит.

Мне нужен способ (tail -f логов, вероятно), чтобы я мог видеть, что на самом деле происходит на сервере, когда я пытаюсь подключиться с разных машин. Может быть, это поможет мне в устранении неполадок. Есть ли советы по отладке этой проблемы?

Команда man 5 sshd_config предоставит вам множество опций.

Настройка LogLevel VERBOSE в файле /etc/ssh/sshd_config вероятно, то, что вам нужно, хотя есть и более высокие уровни.

Сообщения по умолчанию будут записываться в /var/log/auth.log, поэтому вам нужно будет tail -f /var/log/auth.log в отдельном терминале, чтобы увидеть, что происходит.

Проблема оказалась в том, что другая машина имела тот же IP-адрес, что и сервер. Очень тривиально, но не очевидно (вздох). Спасибо за помощь тем, кто ответил.

Я был в отчаянии и собирался начать использовать Wireshark, когда проверил таблицы arp на клиентах и заметил, что клиенты, у которых время от времени возникают проблемы, иногда получают разные MAC-адреса для того же IP-адреса сервера. Это заставило меня подумать, что в сети может быть другая машина. Вот в чем была проблема.

Я полагаю, что сеть, из которой вы используете nmap, не имеет разрешения брандмауэра на доступ к порту 22 на сервере.
На другой машине, с которой вы видите только порт 22 на сервере, но не порт 80, правило брандмауэра разрешает подключение к порту 22, но не к порту 80 с этой машины к серверу.

Проверьте настройки брандмауэра для правила, разрешающего доступ к ssh и http на сервер с вашего компьютера и другого компьютера.

Если это не решит проблему, вы можете проверить журналы, как упомянуто в предыдущем ответе.

У меня был интересный случай

Аутентификация отказана: неправильное владение или режимы для директории /home/user
На стороне клиента (ssh —v) заметил, что rsa просто не принимается. Пришлось действительно отлаживать сторону sshd:

$ tail -f /var/log/auth.log
Нашел ошибку, упомянутую выше. Проверил разрешения на домашнюю папку – 777 по какой-то причине (папка ~/.ssh 700 и authorized_keys2 640 были в порядке). Поэтому chmod 750 /home/renard/ помогло. Таким образом, есть требования и к домашней папке.

Ответ или решение

Как отладить входящие соединения SSH: Подробное руководство

Отладка SSH-соединений может показаться сложной задачей, особенно когда возникают проблемы с доступом к серверу, как в вашем случае с Ubuntu 16.04. Ниже представлена подробная инструкция по шагам, которые вы можете предпринять, чтобы выявить и устранить проблемы с подключением.

1. Проверьте статус SSH-сервера

Убедитесь, что SSH-сервер (sshd) запущен:

sudo systemctl status ssh

Также полезно проверить, слушает ли SSH-сервер нужный порт (по умолчанию это порт 22):

sudo netstat -tuln | grep ':22'

2. Проверьте настройки брандмауэра

Убедитесь, что брандмауэр не блокирует порт SSH. Используйте следующие команды для проверки настроек:

sudo iptables -L -n
sudo ufw status verbose

Убедитесь, что правилам в брандмауэре разрешены подключения к порту 22.

3. Настройте уровень логирования SSH

Для более детального отслеживания проблем измените уровень логирования в конфигурационном файле SSH:

  • Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
  • Найдите строку LogLevel и измените ее на:
LogLevel VERBOSE
  • После внесения изменений перезапустите SSH-сервер:
sudo systemctl restart ssh
  • Теперь откройте новый терминал и выполните команду, чтобы отслеживать логи:
tail -f /var/log/auth.log

Это позволит вам видеть все события, связанные с аутентификацией, в реальном времени.

4. Используйте "verbose" режим SSH

При выполнении подключения к серверу можно использовать параметр -v для повышения уровня подробности:

ssh -v user@server-ip

Вы также можете добавить больше v, например, -vvv, для еще более детализированных логов.

5. Проверка ARP-таблиц

Если вы подозреваете, что проблема может быть связана с сетевой конфигурацией, проверьте ARP-таблицы на машине-клиенте, чтобы убедиться, что вы не подключаетесь к другому устройству с тем же IP-адресом:

arp -a

При наличии множественного устройства с одним и тем же IP вы можете столкнуться с потерей соединения.

6. Проверка прав доступа

Иногда проблемы с доступом могут быть вызваны некорректными правами на файловой системе. Убедитесь в корректных правах доступа к домашнему каталогу пользователя и скрытой папке .ssh:

ls -ld /home/user
ls -ld /home/user/.ssh

Права на домашний каталог пользователя должны быть не более 755, а для папки .ssh – не более 700.

7. Дополнительная диагностика

Если предыдущие шаги не помогли, подумайте о следующих вариантах:

  • Проверка конфигураций межсетевого экрана на обоих концах (клиент и сервер).
  • Проверка сетевых маршрутов, чтобы убедиться, что пакеты достигают сервера.
  • Попробуйте воспользоваться другим инструментом, таким как Wireshark, для анализа сетевой активности.

Заключение

Отладка SSH-соединений может быть непростой задачей, но с правильным подходом и пониманием процесса можно найти и устранить проблему. Следуя предложенным шагам и определяя возможные причины, вы значительно упростите диагностику и восстановление доступа к вашему серверу. Если вы обнаружите, что дело в конфликтующем IP-адресе или сетевых настройках, правильная корректировка поможет устранить проблему.

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

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