Что точно делают опции 'ServerAliveInterval' и 'ClientAliveInterval' в sshd_config?

способность является предпочтительной программой для управления пакетом от консоли и для установок пакета и для пакета или обновлений системы в Debian.

Вот обзор инструмента и функций, которые он имеет по Кв. - доберитесь: http://www.debian.org/doc/FAQ/ch-pkgtools.en.html#s-aptitude

Так, мой совет только к склонному - получают способность установки :)

168
13.04.2017, 15:36
6 ответов

ServerAliveInterval: число секунд, что клиент будет ожидать прежде, чем отправить пустой пакет на сервер (для поддержания соединения).

ClientAliveInterval: число секунд, что сервер будет ожидать прежде, чем отправить пустой пакет клиенту (для поддержания соединения).

Устанавливание значения 0 (значение по умолчанию) отключит эти опции, таким образом, Ваше соединение могло отбросить, если это неактивно слишком долго.

ServerAliveInterval, кажется, наиболее распространенная стратегия поддержать соединение. Для предотвращения поврежденной проблемы канала вот, конфигурация ssh, которую я использую в своем .ssh/config файле:

Host myhostshortcut
     HostName myhost.com
     User barthelemy
     ServerAliveInterval 60
     ServerAliveCountMax 10

Вышеупомянутая установка будет работать следующим образом,

  1. Клиент будет ожидать неактивный в течение 60 секунд (время ServerAliveInterval) и, не отправить "никакой-op пустой пакет" на сервер и ожидать ответ. Если никакой ответ не произойдет, то это будет продолжать пробовать вышеупомянутый процесс до 10 раз (ServerAliveCountMax) (600 секунд). Если сервер все еще не отвечает, то клиент разъединяет соединение SSH.

ClientAliveCountMax на стороне сервера мог бы также помочь. Это - предел того, сколько времени клиенту разрешают остаться безразличным прежде чем быть разъединенным. Значение по умолчанию равняется 3, как в трех ClientAliveInterval.

211
27.01.2020, 19:28
  • 1
    Хорошо, таким образом, я интерпретировал бы нулевые секунды для допущения, "не поддерживают", который является, почему это не опрашивает клиент/сервер? –  M. Tibbits 12.10.2010, 19:33
  • 2
    да 0 = не отправляет пустой пакет. Другой отличающийся был бы то, что ServerAliveInterval установлен в клиентской конфигурации, тогда как ClientAliveInternal установлен в конфигурации сервера. –  Barthelemy 12.10.2010, 19:37
  • 3
    Это походит на хороший совет предотвратить тайм-ауты порождения безделья, но я не понимаю, как он касается вопроса OP предотвращения поврежденных каналов, когда клиент приостанавливает. Когда спящий, клиент не смог бы отправить пустой пакет, поэтому конечно, эта установка спорна? –  Sparhawk 06.10.2013, 05:12
  • 4
    Часть ServerAlive, конечно. ClientAliveInterval/ClientAliveCountMax - то, что помогло бы здесь. –  javawizard 29.09.2014, 22:53
  • 5
    Оглядываясь назад на этот старый ответ, я верю, ответил на вопрос в заголовке а не вопрос во втором абзаце, следовательно комментарии о ServerAliveInternal, не являющемся полезным для, приостанавливают, с которым я соглашаюсь. @JonasWielicki ClientAliveInterval мог быть плохим в случае, приостанавливают, потому что временно отстраненный клиент не ответил бы на сервер, и сервер в конечном счете разъединит клиент после ClientAliveCountMax. –  Barthelemy 16.01.2017, 12:35

Вы могли также выполнить команды с nohup если Вы хотите, чтобы они работали независимо от Вашего соединения SSH.

например.

$ nohup tar -xzf some_huge.tar.gz &

& я думаю, не необходимый, но это удобно, так как это делает процесс выполненным в фоновом режиме, таким образом, можно сделать другой материал.

Я всегда использую nohup для любого процесса, который берет некоторое время, так, чтобы я не запускал, если я теряю соединение по любой причине - перебой в питании (в моем удаленном местоположении, не в хосте, очевидно), сетевое отключение электричества, безотносительно.

5
27.01.2020, 19:28
  • 1
    Обратите внимание, что nohup на zsh не работает правильно! –  Sridhar Sarnobat 21.07.2017, 23:42
  • 2
    @user7000, что является неподходящим об этом? –  Buttle Butkus 22.07.2017, 01:11
  • 3
    , который я не помню, я думаю, что это в основном не сохраняло процесс, бегущий за клиентом, был разъединен. Это было несколько лет назад, и я прекратил использовать nohup и использовал, отрицают вместо этого. –  Sridhar Sarnobat 22.07.2017, 01:17
  • 4
    , я предполагаю zsh пользователи должны придерживаться с disown -h вместо nohup, если проблема не была решена с тех пор. –  Buttle Butkus 22.07.2017, 01:19
[119956]Ответ Бартелеми крут, но на самом деле не доходит до корня проблемы. Вы приостанавливаете свою машину и хотите, чтобы сессия SSH была все еще жива, когда вы загружаете компьютер.

Нет такой конфигурации для ssh, которая бы поддерживала такое соединение. SSH использует TCP, для начала вам нужно трёхстороннее рукопожатие, а затем оставаться живым после некоторого времени простоя. Когда вы закрываете/закрываете все ваши TCP соединения с помощью FIN. Это невозможно преодолеть.
Для грязного обхода вы можете использовать VPS или другой онлайн-бокс с экраном, чтобы сохранить соединение. Мой совет не делать этого из соображений безопасности.[119961]
18
27.01.2020, 19:28

Так как вы не можете гарантировать, что SSH-соединение (будучи TCP) останется в живых после того, как один конец перестанет посылать ACK-пакеты в принимаемые пакеты, Я лично использую http: //www. harding.motd.ca/autossh/, чтобы перезапустить все мои SSH-соединения почти сразу же, как только я откажусь от них.

Поскольку GNU Screen будет использоваться на стороне сервера, повторное подключение приведет меня туда, где я был раньше.

Вы можете заставить его прослушивать дополнительные порты, чтобы он постоянно проверял соединения, но лично я считаю, что он достаточно хорошо работает с отключенным SSH и просто полагаюсь на собственный ServerAliveInterval / ServerAliveCountMax.

Другой вариант - это http://mosh.mit.edu/, который использует UDP и без проблем восстанавливается после длительного отсутствия соединения.

.
16
27.01.2020, 19:28

Поместите ваш долго выполняющийся сеанс внутрь screen. Смотрите screen -h для подробностей

Таким образом, вы сможете переподключиться к машине по ssh и снова подключиться к сессии screen

0
27.01.2020, 19:28

Это объясняется в sshd_config руководство ( man sshd_config ):

ClientAliveInterval

Устанавливает интервал тайм-аута в секундах, по истечении которого, если от клиента не было получено никаких данных, sshd отправит сообщение через зашифрованный канал, чтобы запросить ответ от клиента. Значение по умолчанию - 0, что означает, что эти сообщения не будут отправлены клиенту. Эта опция применима только к протоколу версии 2.

ClientAliveCountMax

Значение по умолчанию - 3. Если для ClientAliveInterval (см. Ниже) установлено значение 15, а для ClientAliveCountMax оставить значение по умолчанию, не отвечающие на запросы клиенты SSH будут отключены. примерно через 45 секунд. Эта опция применима только к версии протокола 2.

Для опций клиента см. Объяснение в man ssh_config :

ServerAliveInterval

Устанавливает интервал тайм-аута в секундах, после которого, если данные не были получены от сервера, ssh отправит сообщение через зашифрованный канал, чтобы запросить ответ от сервера. Значение по умолчанию - 0, что означает, что эти сообщения не будут отправляться на сервер. Эта опция применима только к протоколу версии 2.

ServerAliveCountMax

Значение по умолчанию - 3. Если, например, ServerAliveInterval установлено на 15, а ServerAliveCountMax остается по умолчанию, если сервер перестает отвечать на запросы, ssh отключится примерно через 45 секунд. Эта опция применима только к версии протокола 2.

Исходя из вышеизложенного, 0 означает, что он отключен. Поэтому вы должны установить эти значения достаточно высокими, чтобы избежать ошибки Broken pipe .

24
27.01.2020, 19:28

Теги

Похожие вопросы