У меня ServerAliveInterval
и в случае нескольких машин также ClientAliveInterval
установлен на 540 в файлах конфигурации клиент / сервер SSH (я полагаю , установив его на более чем это было бы хорошей идеей). Я работаю со многими сессиями SSH, которые в настоящее время замораживаются через несколько минут.
Как я могу это исправить? Я хочу, чтобы сеанс вообще не зависал, чтобы, если я открываю сеанс в 8 и не использую его в течение 4 часов, например, чтобы он все еще использовался в 12 без необходимости повторного входа в систему ,
TCPKeepAlive yes
?TCPKeepAlive yes
- зависит от машины.autossh
...screen
вместо этого. Но я все еще поднимаю ваш вопрос, потому что через одну или две минуты я столкнулся с той же проблемой.Ответы:
Изменения, внесенные в
/etc/ssh/ssh_config
и/etc/ssh/sshd_config
правильны , но по - прежнему не имеют никакого эффекта.Чтобы заставить вашу конфигурацию работать, внесите эти изменения конфигурации на клиенте:
/etc/ssh/ssh_config
ServerAliveInterval Клиент будет отправлять нулевой пакет на сервер каждые 100 секунд, чтобы поддерживать соединение
Пакет NULL Отправляется сервером клиенту. Тот же пакет отправляется клиентом на сервер. Пакет TCP NULL не содержит никаких управляющих флагов, таких как SYN, ACK, FIN и т. Д., Поскольку сервер не требует ответа от клиента. Пакет NULL описан здесь: https://tools.ietf.org/html/rfc6592
Затем настройте часть sshd на сервере.
/etc/ssh/sshd_config
ClientAliveInterval Сервер будет ждать 60 секунд, прежде чем отправить нулевой пакет клиенту, чтобы сохранить соединение живым
TCPKeepAlive Обеспечивает, чтобы определенные брандмауэры не сбрасывали бездействующие соединения.
Сервер ClientAliveCountMax отправит клиенту живые сообщения, даже если он не получил никакого сообщения от клиента.
Наконец перезапустите
ssh server
service ssh restart
или вservice sshd restart
зависимости от того, на какой системе вы работаете.источник
ServerAliveCountMax
также необходим для того, чтобы это было как можно более надежным. И если обаServerAliveInterval
иClientAliveInterval
установлены достаточно низко, я не думаю, что будет какая-то необходимостьTCPKeepAlive
. Кроме того, если есть какие-либо промежуточные блоки, они все еще могут потерять состояние, даже если все ранее упомянутые параметры настроены точно. Это может помочь в использовании MPTCP (если и клиент, и сервер поддерживают его).ClientAliveInterval
иClientAliveCountMax
опции ssh-сервера, таким образом, предназначены для,sshd_config
а не дляssh_config
ssh_config
новые сеансы будут читать этот файл./etc/environment
Файл другая вещь , которая имеет форматVAR="value"
без пробелов , таким образом ,VAR = "value"
будут считаться недействительными. Источники/etc/ssh/ssh_config
таким образом будут читать:Port 22
илиHost *
которые будут относиться к ним как к командамЛичное предложение: использовать
screen
на удаленном хосте; ему удастся сохранить ваше соединение живым, пока оно остается активным в терминале.Вот что я обычно добавляю
/etc/screenrc
для быстрой идентификации моих сеансов экрана:РЕДАКТИРОВАТЬ: Подсказки.
hardstatus
Строка покажет нижнюю строку состояния , такие как этот:Буфер прокрутки также расширен до 8192 строк вместо обычных 1000-1500 (в зависимости от распределения).
источник
screenrc
файле? Как настроить систему на стартовый экран / tmux сразу после входа в систему?screen
не поддерживает ли ваше соединение SSH живым. Он запускает процессы в виртуальном терминале независимо от пользовательского терминала, кssh
которому вы подключаетесь, поэтому процесс не зависит от вашего соединения. Вы по-прежнему потеряетеssh
соединение, пока оно не будет решено.screen
, я советую новым пользователям начать сtmux
.С OpenSSH:
Вам необходимо включить
как в вашем клиенте ssh_config (например,
/etc/ssh/ssh_config
или в~/.ssh/config
), так и на вашем конечном SSH-сервере, на котором работает OpenSSH (например, / etc / ssh / sshd_config).Поэтому каждый раз, когда ваше соединение простаивает, OpenSSH отправляет какой-то фиктивный пакет вашему хосту назначения ...
источник
The default is ''yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes.
...this means that connections will die if the route is down temporarily, and some people find it annoying.
разрыву"[…] network goes down […] client host crashes […] route is down […]"
это серьезные ошибки, которые не может поймать ни одна конфигурация SSH. Основной проблемой здесь являются неактивные сеансы SSH, а не сбои сети. Поэтому подведем итог: - включитьTCPKeepAlive yes
как на сервере, так и на клиенте - установитьClientAliveInterval
на сервере - установитьIdleTimeout
на сервере - установитьClientAliveCountMax
Это должно сделать свое дело ...Если проблема в ноутбуке в спящем режиме или в сетевом соединении, которое не соответствует префекту, я бы порекомендовал использовать тот,
mosh
который работаетssh
и позволяет автоматически переподключаться.С сайта :
В сочетании с
tmux
(или более старымscreen
) это позволяет мне подключатьсяssh
к серверу через ноутбук с моего ноутбука и оставаться на связи в течение нескольких дней даже при смене подключений Wi-Fi и сохраняющихся выпадениях мобильных данных.источник
Проверьте конфигурацию sshd на хост-компьютере
/etc/sshd_config
дляIdleTimeout
настройки .источник