Как устранить ошибку "Connection Refused" на порту 22 в Linux
09:52, 10.05.2024
Администрирование сервера в системе Linux не всегда является безупречным процессом, время от времени могут возникать некоторые проблемы и ошибки. Здесь мы поделимся нашим практическим опытом по поводу ошибки "connection refused". Когда возникает такая проблема, это означает, что подключение по протоколу SSH невозможно, и вам лучше следовать некоторым профессиональным рекомендациям, чтобы решить эту проблему с помощью методичного подхода.
Оценка подключения клиента
Чтобы начать решать эту проблему, необходимо провести тестирование на стороне клиента. Для этого мы подробно расскажем об использовании telnet и ping.
Тест доступности сервера с помощью Ping
Первое, что можно сделать для тестирования, - это использовать ping и IP или имя хоста, чтобы определить, можно ли связаться с сервером. Вот как это можно сделать:
$ ping 11.321.44.2
Если сервер доступен, вы получите дополнительную информацию, а также статистику пинга. Однако в случае отсутствия ответа на эту команду это не является 100-процентной гарантией того, что сервер недоступен.
Проверка доступности порта с помощью Telnet
Еще один отличный вариант - проверить доступность порта с помощью команды telnet, которая использует текстовое соединение. Итак, давайте воспользуемся следующей командой для проверки порта SSH по умолчанию:
$ telnet 11.321.44.2 22
Если соединение успешно установлено, то вы увидите информацию об операционной системе и программном обеспечении SSH-сервера. Если попытка не увенчалась успехом и вы не получили таких данных, это не означает, что данный сервер недоступен.
Проверка конфигурации SSH-сервера
Теперь давайте проверим, что порт SSH функционирует должным образом, просмотрев конфигурацию сервера с помощью:
$ grep Port /etc/ssh/sshd_config
Port 2222
Здесь мы не используем стандартный 22 порт. Тогда используйте следующую строку:
$ ssh -p 2222 user_name@ourserverip
Этот порт можно легко изменить на порт по умолчанию с помощью:
$ grep Port /etc/ssh/sshd_config
Port 22
После этого вам останется только выполнить перезагрузку с помощью systemctl. После этого подключение через порт по умолчанию может быть выполнено:
$ sudo systemctl restart sshd
Проверка статуса SSH
Следующим шагом в нашей процедуре будет проверка службы SSH и анализ состояния установки.
Проверка статуса службы SSH
Проверка статуса проста и должна включать следующую строку:
$ systemctl status ssh
Вывод этой строки должен содержать все подробности о данных процесса, текущем состоянии, логах, а также конфигурации. Если у вас нет такого подробного вывода и сервер не запущен, то вы можете использовать следующую команду:
$ sudo systemctl start sshd
В дополнение к этому может потребоваться включить службу SSH:
$ sudo systemctl enable sshd
В завершение следует выполнить перезагрузку, после чего можно попробовать проверить статус еще раз.
Конфигурация и исследование брандмауэра
Еще одно объяснение этой ошибки может быть связано с блокировкой брандмауэра. Поэтому нам необходимо указать инструмент, который контролирует наш доступ к системе.
Использование брандмауэра ufw
Чтобы проверить, нет ли блокировки трафика SSH, выполните следующую команду:
$ sudo ufw status
При просмотре результатов вы увидите, разрешен ли трафик и в каком направлении. Если вы не видите этой информации, попробуйте сначала открыть порт по умолчанию:
$ sudo ufw allow 22
Затем выполните перезагрузку и повторите попытку:
$ sudo ufw reload
Конфигурация брандмауэра iptables
Следующим шагом в этом процессе будет просмотр правил iptables:
$ sudo iptables -n -L | grep 22
С помощью этой команды вы можете проверить правила, разрешающие определенный трафик на порту 22. Если в выводе нет входящего трафика, вы можете изменить это с помощью:
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Теперь давайте объясним вышеупомянутую строку, чтобы вы лучше понимали процесс:
- 22 - эта часть определяет порт.
- -p tcp - здесь мы указываем необходимый протокол, в данном случае это TCP.
- -j ACCEPT означает, что трафик, соответствующий данному правилу, должен быть принят.
Следующим шагом будет установка iptables-persistent, это нужно сделать для того, чтобы они сохранялись после перезагрузки:
$ sudo apt-get install iptables-persistent
Во время процесса вам будет предложено сохранить текущие правила.
Конфигурация брандмауэра firewalld
Мы используем следующую команду, чтобы проверить, открыт ли порт SSH, это необходимо сделать в случае, если firewalld работает в Linux:
$ sudo firewall-cmd --list-ports
Может возникнуть ситуация, когда этого порта нет в списке, поэтому вы можете разрешить его с помощью следующей строки:
$ sudo firewall-cmd --permanent --add-port=22/tcp
Используя эту команду, вы добавляете порт 22 в постоянную конфигурацию. После выполнения этого шага выполните перезагрузку:
$ sudo firewall-cmd --reload
Управление хостом SSH
Теперь попробуем разобраться с проблемами, которые могут быть связаны с ключами хоста. Справиться с этим можно, очистив файл:
$ cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak && echo > ~/.ssh/known_hosts
Проверка логов SSH
Еще один метод, который мы можем использовать для устранения ошибки, - проверить журналы SSH на наличие возможных проблем. Чтобы проверить последние логи, используйте tail и -f для просмотра новых записей:
$ tail -f /var/log/auth.log
Вы также можете попробовать /var/log/secure, если расположение в команде примера не помогло. Это два типичных варианта, но у вас есть и другой путь.
Анализ проблемы SSH
Если ни один из вышеупомянутых вариантов не сработал в вашем случае, то мы можем предложить еще один:
$ ssh -v asr@177.155.233.156.
Полученный результат поможет вам определить проблемы с SSH-соединением.
Заключение
Здесь мы поделились с вами некоторыми практическими рекомендациями по устранению ошибки SSH в системе Linux. Мы постарались включить все наиболее распространенные стратегии, касающиеся самых основных проблем с подключением. Начните с проверки конфигурации SSH, затем приступайте к тестированию настроек брандмауэра, и, конечно, вы также можете использовать анализ проблемы SSH. Просто следуя простейшей процедуре, вы получите безопасное SSH-соединение в вашей операционной системе (в нашем случае Linux).