ServerAliveInterval : количество секунд, которое клиент будет ожидать перед отправкой нулевого пакета на сервер (чтобы поддерживать соединение в активном состоянии).
ClientAliveInterval : количество секунд, в течение которых сервер будет ожидать, прежде чем отправлять нулевой пакет клиенту (чтобы поддерживать соединение в активном состоянии).
Установка значения 0 (по умолчанию) отключит эти функции, поэтому ваше соединение может разорваться, если оно простаивает слишком долго.
ServerAliveInterval, по-видимому, является наиболее распространенной стратегией поддержания соединения. Чтобы предотвратить проблему со сломанным каналом, вот конфигурация ssh, которую я использую в своем файле .ssh / config:
Host myhostshortcut
HostName myhost.com
User barthelemy
ServerAliveInterval 60
ServerAliveCountMax 10
Вышеуказанная настройка будет работать следующим образом,
- Клиент будет бездействовать в течение 60 секунд (время ServerAliveInterval) и отправить серверу «пустой пакет» и ожидать ответа. Если ответ не приходит, он будет пытаться выполнить описанный выше процесс до 10 раз (ServerAliveCountMax) (600 секунд). Если сервер по-прежнему не отвечает, клиент отключает соединение ssh.
ClientAliveCountMax на стороне сервера также может помочь. Это предел того, как долго клиент может оставаться без ответа до отключения. Значение по умолчанию равно 3, как в трех ClientAliveInterval.
Это объясняется в
sshd_config
manual (man sshd_config
):Параметры клиента см. В объяснении
man ssh_config
:На основании выше, 0 означает, что он отключен. Поэтому вы должны установить эти значения достаточно высоко, чтобы избежать ошибки сломанной трубы .
источник
ServerAliveInterval
в своем конфигурационном файле.Ответ от Бартелеми классный, но в действительности не доходит до корня проблемы. Вы приостанавливаете работу своего компьютера и хотите, чтобы сеанс SSH оставался активным при загрузке компьютера.
Для ssh нет такой конфигурации, которая бы поддерживала такое соединение. SSH использует TCP, для начала вам нужно трехстороннее рукопожатие, а затем поддерживать его после некоторого простоя. Когда вы выключаете / переводите в спящий режим все ваши TCP-соединения закрываются с помощью FIN. Нет способа преодолеть это.
Для грязного обходного пути вы можете использовать VPS или другую онлайн-коробку с экраном, чтобы сохранить соединение. Мой совет не делайте этого по соображениям безопасности.
источник
Поскольку вы не можете гарантировать, что SSH-соединение (то есть TCP) останется живым, как только один конец перестанет отправлять ACK на полученные пакеты, я лично использую http://www.harding.motd.ca/autossh/, чтобы перезапустить все мои SSH-соединения почти сразу же, как я приостановил.
Поскольку GNU Screen будет использоваться на стороне сервера, повторное подключение приведет меня туда, где я был раньше.
Вы можете прослушивать дополнительные порты, чтобы он постоянно проверял, что соединения все еще живы, но лично я считаю, что он достаточно хорошо работает с отключенным и полагается только на собственный SSH
ServerAliveInterval
/ServerAliveCountMax
.Другой вариант - http://mosh.mit.edu/, который использует UDP и без проблем восстанавливается после длительного отсутствия соединения.
источник
Вы также можете запускать команды,
nohup
если хотите, чтобы они выполнялись независимо от вашего SSH-соединения.например
$ nohup tar -xzf some_huge.tar.gz &
&
Есть, я думаю, не стоит, но это удобно , так как это делает процесс работать в фоновом режиме , так что вы можете сделать другие вещи.Я всегда использую nohup для любого процесса, который занимает некоторое время, так что мне не нужно начинать сначала, если я потеряю соединение по какой-либо причине - отключение питания (в моем удаленном месте, не на хосте, очевидно), отключение сети, что угодно.
источник
zsh
пользователи должны придерживатьсяdisown -h
вместоnohup
, если только проблема не была исправлена с тех пор.Поместите ваш длительный сеанс в экран. Смотрите screen -h для деталей
Таким образом, вы можете переподключиться к машине с помощью ssh и подключиться к экранной сессии
источник