Это Канонический вопрос около В соединении отказано
Мы видим много вопросов по этому поводу
Когда я пытаюсь подключиться к системе, я получаю сообщение
В соединении отказано
Почему это ?
Заметка: Это сообщение является признаком проблемы, которую вы пытаетесь решить. Понимание причины сообщения в конечном итоге приведет вас к решению вашей проблемы.
Сообщение «Соединение отказано» имеет две основные причины:
Никакой процесс не слушает.
Это, безусловно, самая частая причина сообщения. Сначала убедитесь, что вы пытаетесь подключиться к правильной системе. Если затем вы должны определить, является ли это проблемой, в удаленной системе запустите netstat или сс1 например если вы ожидаете, что процесс будет прослушивать порт 22222
sudo netstat -tnlp | grep :22222
или
ss -tnlp | grep :22222
Для OSX подходящей командой является
sudo netstat -tnlp tcp | grep '\.80 '
Если ничего не слушает, то вышеприведенное не приведет к выходу. Если вы видите какой-либо результат, подтвердите, что это то, что вы ожидаете, затем просмотрите раздел брандмауэра ниже.
Если у вас нет доступа к удаленной системе и вы хотите подтвердить проблему, прежде чем сообщать о ней соответствующим администраторам, вы можете использовать tcpdump (wirehark или аналогичный).
При попытке подключения к порту IP :, где ничего не прослушивается, ответ удаленной системы на начальный SYN-пакет представляет собой пакет с установленными флагами RST, ACK. Это закрывает соединение и вызывает сообщение об отказе в соединении, например
$ sudo tcpdump -n хост 192.0.2.1 и порт 22222
tcpdump: подробный вывод подавлен, используйте -v или -vv для полного декодирования протокола
прослушивание enp14s0, тип канала EN10MB (Ethernet), размер захвата 262144 байта
12: 31: 27.013976 IP 192.0.2.2.34390> 192.0.2.1.22222: Флаги [S], seq 1207858804, win 29200, параметры [mss 1460, sackOK, TS val 15306344 ecr 0, nop, wscale 7], длина 0
12: 31: 27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390: Флаги [Р.], последовательность 0, подтверждение 1207858805, выигрыш 0, длина 0
Обратите внимание, что tcpdump использует . к представляют ACK флаг.
Порт заблокирован брандмауэром
Если порт заблокирован брандмауэром и брандмауэр настроен для ответа icmp-port-unreachable
это также вызовет сообщение об отказе в соединении. Опять же, вы можете увидеть это с помощью tcpdump (или аналогичного)
$ sudo tcpdump -n icmp
tcpdump: подробный вывод подавлен, используйте -v или -vv для полного декодирования протокола
прослушивание enp14s0, тип канала EN10MB (Ethernet), размер захвата 262144 байта 13: 03: 24.149897 IP 192.0.2.1> 192.0.2.2: ICMP 192.0.2.1 TCP-порт 22222 недоступен, длина 68
Обратите внимание, что это также говорит нам, где находится блокирующий брандмауэр.
Итак, теперь вы знаете, что вызывает сообщение об отказе в соединении, вы должны предпринять соответствующие действия, например. обратитесь к администратору брандмауэра или выясните причину, по которой процесс не прослушивает.
1 Вероятно, доступны другие инструменты.
Для меня в сжатии Debian 6 это было так просто, как проверка службы SSH:
sudo service ssh status
И ничего не обнаружив (с сообщением ssh: unrecognized service
) просто установка службы:
sudo apt-get install openssh-server
Это также работает, если вы не получаете SFTP-соединение, поскольку SFTP является подмножеством SSH (тогда как FTPS является подмножеством FTP).