ssh подключение отклонено

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

Привет, у меня проблема с ssh, который волшебным образом перестал работать, и я не могу понять, почему. Сообщение, которое он выдает:

ssh: connect to host <host> port 22: Connection refused

Я не вижу никаких сообщений об ошибках, когда пишу dmesg, но от telnet localhost 22 я получаю следующее:

Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Я попробовал решения, которые видел в некоторых аналогичных случаях [1] и [2], но это все еще не решило мою проблему. Входные данные и выводы следующие:

>> sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
>> sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

Обратите внимание, что это уже было ACCEPT, у меня не было никаких проблем даже до ввода команды sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT. Я также пытался перезапустить ssh, но это ничего не изменило.

>>netstat -a | egrep 'Proto|LISTEN'
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:20128         *:*                     LISTEN     
tcp        0      0 localhost:17600         *:*                     LISTEN     
tcp        0      0 localhost:20129         *:*                     LISTEN     
tcp        0      0 localhost:17603         *:*                     LISTEN     
tcp        0      0 localhost:21128         *:*                     LISTEN     
tcp        0      0 deathstar:domain        *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 *:db-lsp                *:*                     LISTEN     
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN     
tcp6       0      0 [::]:db-lsp             [::]:*                  LISTEN 

Я не знаю, что еще попробовать, надеюсь, что этого достаточно для решения проблемы.

Остальное добавлено после комментария @Ashu

sudo lsof -i | grep ssh

ничего не произошло

>>netstat -l --numeric-ports | grep 22
unix  2      [ ACC ]     STREAM     LISTENING     1618183  @jack-com.canonical.Unity.Master.Scope.files.T1731348652205882

>>sudo iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Изменено после комментария @TheSchwa

>>ps aux | grep sshd
jack      3711  0.0  0.0  15944  2220 pts/26   S+   14:08   0:00 grep --color=auto sshd

Сначала я попробовал удалить и переустановить ssh, но это не сработало, затем я попробовал очистить его:

sudo apt-get purge openssh-server
sudo apt-get install openssh-server

Теперь он работает.

Ошибка TCP “Connection refused” означает, что на этом IP-адресе есть активный хост, но порт, к которому вы пытались подключиться (22 для ssh), не открыт.

Во-первых, дважды проверьте имя вашего хоста и/или IP-адрес.

Наиболее вероятная причина либо в том, что кто-то остановил демон ssh, либо кто-то настроил его на использование альтернативного порта вместо порта по умолчанию (22).

Если у вас есть физический доступ к вашему серверу, войдите на этот сервер и введите команду sudo netstat -tupan. В идеале вы должны увидеть строку, похожую на:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1053/sshd

Если вы этого не видите, попробуйте запустить sshd и/или проверьте, настроен ли он на прослушивание порта 22.

ИЗМЕНЕНИЕ

Обратите внимание на:

:22 – порт 22

LISTEN – есть процесс, который работает и ожидает входящих соединений на порту 22

sshd – имя процесса.

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

SSH Connection refused по следующим причинам:

  1. порт по умолчанию (22) был изменен на что-то другое. Проверьте файл /etc/ssh/sshd_config на наличие изменений порта.

  2. IP-конфликт в локальной сети. Используйте команду arping, чтобы определить наличие конфликта. Посмотрите ваш dhcp пул.

  3. порт ssh не разрешен в ip-tables/файрволе. Проверьте ваши iptables/файрвол и разрешите.

*Удаление/переустановка пакета ssh – не лучшая идея, так как это изменит многие ключи и пароли.

Одна из самых распространенных проблем – это сам сервис sshd. Вы проверяли, действительно ли он запущен? Также я заметил, что вы напрямую редактируете свои iptables, так что если у вас запущен ufw/firewalld, стоит также это проверить.

Также убедитесь, что сервер ssh работает на правильном IP и полное доменное имя (FQDN) направляет на правильный IP-адрес.

Ваш файрвол сервера настроен так, чтобы порт был открыт, но никто не слушает, чтобы ответить на ваше соединение.

Вам нужно, чтобы sshd (демон ssh) был установлен и работал…

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring

Вам необходимо создать отсутствующий каталог следующим образом:

mkdir /var/run/sshd
chmod 0755 /var/run/sshd

Затем запустите неисправный сервер shh с помощью:

service ssh start

И все!

У меня была эта проблема, потому что я не выполнил sudo ufw allow ssh. Я всего лишь выполнил sudo ufw allow 22, что было недостаточно.

[root@fakeser ~]# ufw status
Status: active

To                         Action      From
--                         ------      ----
22 on eth1                 ALLOW       Anywhere        
Nginx HTTP                 ALLOW       Anywhere        
Nginx HTTPS                ALLOW       Anywhere        
22 (v6) on eth1            ALLOW       Anywhere (v6)   
Nginx HTTP (v6)            ALLOW       Anywhere (v6)   
Nginx HTTPS (v6)           ALLOW       Anywhere (v6)   

ВЫШЕУКАЗАННОЕ НЕ СРАБОТАЛО

НИЖЕУКАЗАННОЕ СРАБОТАЛО

[root@fakeser ~]# ufw allow ssh
Rule added
Rule added (v6)
[root@fakeser ~]# ufw status
Status: active

To                         Action      From
--                         ------      ----
22 on eth1                 ALLOW       Anywhere        
Nginx HTTP                 ALLOW       Anywhere        
Nginx HTTPS                ALLOW       Anywhere        
22/tcp                     ALLOW       Anywhere        
22 (v6) on eth1            ALLOW       Anywhere (v6)   
Nginx HTTP (v6)            ALLOW       Anywhere (v6)   
Nginx HTTPS (v6)           ALLOW       Anywhere (v6)   
22/tcp (v6)                ALLOW       Anywhere (v6)   

Еще одна возможная проблема: маршрутизатор вашей клиентской сети блокирует SSH-соединения. Мой компьютер автоматически подключался к нашей гостевой Wi-Fi, переключение обратно на обычный Wi-Fi решило проблему. Это также может быть проблемой, если вы используете общественный Wi-Fi.

В некоторых случаях я заметил, что процесс ssh необходимо вручную перезапустить с помощью
sudo apt install openssh
sudo service ssh start

У меня была эта проблема, потому что fail2ban достиг максимального порога паролей. Я исправил это, выполнив fail2ban unban --all на хосте, к которому я пытался подключиться по ssh.

Сегодня возникла такая же проблема, я дома и подключен через VPN к корпоративной сети. Оказалось, что мой локальный IP-адрес совпадает с IP-адресом сервера в компании. Таким образом, при выполнении ssh [email protected] SSH пытается подключиться к моему локальному компьютеру вместо желаемого сервера.

Проблему можно решить, назначив домашнему маршрутизатору подсеть, которая отличается от корпоративной, чтобы не было пересечения в IP-адресах.

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

Почему возникает ошибка SSH "Connection refused": подробный анализ и решение проблемы

Ошибка "ssh: connect to host port 22: Connection refused" может возникать по нескольким причинам, и решение этой проблемы требует последовательного анализа настроек системы и сетевой инфраструктуры. Рассмотрим возможные причины, их диагностику и шаги по устранению.

1. Причины возникновения ошибки

Ошибка "Connection refused" обычно указывает на то, что на сервере не запущен SSH-демон (sshd) или он не слушает на стандартном порту (22). Рассмотрим подробнее возможные причины:

  • SSH-демон не запущен: Возможно, служба SSH не была запущена или аварийно завершила свою работу.

  • Проблемы с конфигурацией: Файл конфигурации /etc/ssh/sshd_config мог быть изменён, что привело к перенастройке порта, а также к изменению параметров доступа.

  • Блокировка фаерволом: Правила брандмауэра (iptables или UFW) могут блокировать входящие подключения на порт 22.

  • Конфликт IP-адресов: Если вы используете VPN или находитесь в сети с динамическим IP, возможно, возник конфликт адресов.

2. Диагностика

Проверка работы SSH-демона

Используйте команду для проверки работы SSH-демона:

sudo systemctl status ssh

Выход должен показывать, что служба активна и работает. Если служба не запущена, выполните:

sudo systemctl start ssh

Проверка конфигурации

Откройте файл конфигурации SSH:

sudo nano /etc/ssh/sshd_config

Проверьте параметры, убедитесь, что используется порт 22:

Port 22

Проверка сетевых подключений

Используйте команду для проверки открытых портов:

sudo netstat -tulnp | grep :22

Вы должны увидеть строку, которая подтверждает, что процесс sshd слушает на порту 22.

Проверка настроек брандмауэра

Проверьте настройки iptables:

sudo iptables -L -n

Убедитесь, что правила разрешают трафик на порт 22.

Если вы используете UFW, проверьте его статус:

sudo ufw status

Разрешите SSH, если он ещё не разрешён:

sudo ufw allow ssh

3. Устранение проблемы

Если демон SSH не запущен, запустите его. Если изменения в конфигурации были внесены, а вы не уверены в их корректности, можно восстановить стандартные настройки SSH, удалив конфигурационный файл и переустановив SSH:

sudo apt-get purge openssh-server
sudo apt-get install openssh-server

Однако перед этим сохраните ваш текущий конфигурационный файл.

4. Возможные дополнительные причины

  • Блокировка с использованием fail2ban: Если парольные попытки SSH были превышены, служба мога заблокировать доступ. В этом случае используйте:

    sudo fail2ban-client unban --all
  • Конфликт сетевых адресов: Убедитесь, что IP-адреса вашей локальной сети не конфликтуют с адресами, которые используются на сервере.

Заключение

Проблема с SSH "Connection refused" может быть решена путем проверки статуса SSH-демона, конфигурации, правил брандмауэра и сетевых конфликтов. Если следовать приведенным шагам, вы сможете установить соединение, улучшив безопасность и доступность вашего серверного окружения.

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

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