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

  • 24.12.2019
  • 2 960
  • 0
  • 06.01.2020
  • 7
  • 7
  • 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. В данном клиенте также есть настройки, позволяющие избежать разрыва 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.

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

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

Ваш адрес email не будет опубликован.

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