Соединение через SSH постоянно сбрасывается (обрывается)

  • 24.12.2019
  • 47 214
  • 5
  • 06.04.2024
  • 38
  • 38
  • 0
Соединение через SSH постоянно сбрасывается (обрывается)

Раз вы читаете эту статью, то скорей всего столкнулись с такой проблемой, что ваши удаленные SSH сессии, которые открыты с помощью стандартных средств Linux, вроде ssh или sftp, или же через Putty, в случае работы с компьютера под управлением Windows, постоянно сбрасываются и обрываются. Хотя само интернет соединение на вашем компьютере с виду работает исправно, это не помогает от разрывов.

Описание

Основными причинами, по которым ваши подключения обрываются могут быть:

  • Очень плохое подключение к сети/интернету, потери пакетов и высокий пинг;
  • На некоторых серверах по умолчанию стоят настройки, которые обрывают SSH сессии в случае долго бездействия;
  • Некоторые модели роутеров обрывают соединения, если они долгое время не активны;
В данной статье мы рассмотрим 2 способа решения данной проблемы. Локальный (который вы можете использовать на своем ПК с которого подключаетесь к другим компьютерам) и Удаленный (который вы можете использовать, чтобы задать необходимые настройки на каком-либо сервере, к которому вы подключаетесь).

Локальный способ для Linux (ssh)

Для всех исходящих SSH сессий

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

Для этого открываем файл /etc/ssh/ssh_config и в самый низ этого файла добавляем следующие строчки:

ServerAliveInterval 60
ServerAliveCountMax 10

ServerAliveInterval 60 - Данный параметр определяет как часто ваш ПК с которого установлена SSH сессия (клиент) будет отправлять на сервер SSH к которому вы подключились пакет, говорящий "я живой". В нашем примере это будет происходить каждые 60 секунд.
ServerAliveCountMax 5 - Данный параметр определяет, сколько раз такой пакет "я живой" будет отправлен на сервер в том случае, когда от сервера не последовало ответа, прежде чем принудительно разорвать соединение. В нашем примере 5 раз.
С такими настройками сессия будет висеть 60 * 5 = 300 секунд, после чего автоматически оборвется (только в случае, когда сервер вам не отвечает 5 раз подряд).

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

Для выборочных исходящих SSH сессий

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

ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5 root@sysadmin.ru

Локальный способ для Windows

Putty

В операционных системах семейства Windows очень часто в качестве ssh клиента используется Putty (или его популярный форк KiTTY). В данном клиенте также есть настройки, позволяющие избежать разрыва ssh сессий. Находятся они вот тут:

Connection - Sending of null packets to keep session active - Seconds between keepalives (0 to turn off)

Задаем значение, например 60 и проверяем работу.

WinSCP

Эти же настройки есть и в программе WinSCP. Найти их можно следующим способом:

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

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

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

Удаленный способ Linux & Windows

Если проблема с постоянным разрывом SSH сессий присутствует только на одном определенном сервере, то тогда можно в его конфигурации sshd сделать небольшие изменения, чтобы решить эту проблему. Для этого открываем файл /etc/ssh/sshd_config и в самый низ конфигурации дописываем следующие настройки:

ClientAliveInterval 60
ClientAliveCountMax 5

ClientAliveInterval 60 - Данный параметр определяет как часто сервер, к которому вы подключены, будет отправлять на ваш компьтер (клиент) пакет, говорящий "я живой". В нашем примере это будет происходить каждые 60 секунд.
ClientAliveCountMax 5 - Данный параметр определяет, сколько раз такой пакет "я живой" будет отправлен от сервера на ваш клиентский ПК, когда от вашего ПК не последовало ответа, прежде чем принудительно разорвать соединение. В нашем примере 5 раз.
С такими настройками сессия будет висеть 60 * 5 = 300 секунд, после чего автоматически оборвется (только в случае, когда клиент не отвечает 5 раз подряд).

После внесения изменений в конфиг, необходимо перезапустить службу sshd на сервере, сделать это можно следующей командой:

sudo service sshd restart

И попытаться подключиться к нему через ssh.

Была ли эта статья Вам полезна?

Комментарии к статье (5)

    • adward

    где найти sshd_config в Windows 11?
    Я коннекчусь к серверам используя командную строку вида
    ssh username@server
    не используя WinSCP и Putty

    • sshd_config это конфиг сервера, то есть компьютера к которому вы подключаетесь. Если вы действительно подключаетесь по SSH к компьютеру с Windows, то данный конфиг следует искать по пути %PROGRAMDATA%\ssh.
      Если же, вы имеете ввиду конфиг клиента, т. е. ssh_config, то он должен находиться по пути %USERPROFILE%\.ssh\config.

    • ixley

    Спасибо

    • Дмитрий

    Спасибо с советом в WinSCP, после изменения настроек соединение стало поддерживаться и больше не требует переподключения, но почему дисконекты появились до определенного момента я так и не понял, грешу на хостинг.

    • Антон

    За команду ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5 root@sysadmin.ru огромнейшее спасибо!!!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.