Какое время ожидания по умолчанию для OpenSSH?

25

Кажется, я не могу найти ответ на этот простой вопрос, который мне нужен для некоторой документации соответствия.

В случае установки CentOS 6.5 по умолчанию (OpenSSH 5.3p1-94.el6), через сколько времени простоя сеанс пользователя SSH будет прерван? Я полагаю, что следующее может быть установлено, чтобы увеличить время простоя, но они закомментированы по умолчанию.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Также есть ли команда для вывода списка текущих sshdнастроек? Я ничего не вижу в man sshd.

Banjer
источник
3
Некоторые оболочки могут быть настроены на выход после истечения времени ожидания. Это приведет к завершению сеанса SSH. Проверьте, установлена ​​ли ваша переменная окружения TMOUT.
Кенстер

Ответы:

23

Закомментированные строки sshd_configобычно отображают значения по умолчанию. Это касается всех строк вашего вопроса. Вы можете проверить это на sshd_configстранице руководства . Вот соответствующие фрагменты:

TCPKeepAlive

      Указывает, должна ли система отправлять сообщения поддержки активности TCP другой стороне. Если они отправлены, смерть соединения или сбой одной из машин будут замечены должным образом. Однако это означает, что соединения прекратят свое существование, если маршрут временно не работает, и некоторые люди считают это раздражающим. С другой стороны, если сообщения поддержки TCP не отправляются, сеансы могут зависать на сервере неограниченное время, оставляя «призрачных» пользователей и потребляя ресурсы сервера.

      По умолчанию используется значение «да» (для отправки сообщений поддержки активности TCP), и сервер заметит, если сеть выйдет из строя или произойдет сбой хоста клиента. Это позволяет избежать бесконечно зависающих сессий.

      Чтобы отключить сообщения поддержки активности TCP, необходимо установить значение «нет».

      Этот вариант ранее назывался KeepAlive.

ClientAliveCountMax

      Устанавливает количество живых сообщений клиента (см. Ниже), которые могут быть отправлены без sshd (8) получения каких-либо сообщений от клиента. Если этот порог достигнут во время отправки клиентских живых сообщений, sshd отключит клиента, завершив сеанс. Важно отметить, что использование живых сообщений клиента сильно отличается отTCPKeepAlive (ниже)(над). Живые сообщения клиента отправляются через зашифрованный канал и, следовательно, не могут быть подделаны. Опция keepalive протокола TCP, включенная TCPKeepAliveподделкой. Механизм «живой клиент» полезен, когда клиент или сервер зависят от того, когда соединение стало неактивным.

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

ClientAliveInterval

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

jordanm
источник
1
Поправьте меня, если ошибаюсь, но если бы между мной и машиной не было брандмауэра (с настройками по умолчанию), то я бы никогда не отключился? Я знаю, что наш брандмауэр сбрасывает бездействующие TCP-соединения через 60 минут, так что именно там происходит закрытие неактивных соединений. Я просто хотел проверить и проверить, закрывает ли сам OpenSSH сессии. Я думаю, что ответ «Нет», openssh не закрывает неиспользуемые соединения явно, но обычно это делают межсетевые экраны Параметры, упомянутые в вашем ответе, на самом деле помогают сохранить соединение или правильно прервать сеанс, если он обнаружит, что он был сброшен.
Banjer
2
В цитируемом тексте говорится, что по умолчанию для ClientAliveInterval установлено значение 0, что означает, что он не определяет интервал времени, в течение которого соединение остается открытым. И все же мы знаем, что временной интервал имеет некоторое конечное значение по умолчанию. Поэтому кажется, что должен быть какой-то другой параметр, который устанавливает, как долго соединение остается открытым по умолчанию. Если мой анализ, приведенный выше, верен, то предположим, что и сервер, и клиент - это машины linux, работающие с openssh, и оба используют все значения по умолчанию. В этом случае какая сторона устанавливает значение по умолчанию, каково его значение и где оно установлено?
Бен Кроуэлл
2
@BenCrowell И все же мы знаем, что временной интервал по умолчанию имеет некоторое конечное значение. Какой временной интервал и откуда ты это знаешь?
Петр Доброгост
9

Вы можете настроить поддержку активности SSH на стороне клиента или сервера:

Сторона клиента

Файл: /etc/ssh/ssh_config

Содержание:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Серверная сторона

Файл: /etc/ssh/sshd_config

Содержание:

ClientAliveInterval XX
ClientAliveCountMax YY

Извлечено из: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteone
источник
6
Полезно, но никак не отвечает на вопрос.
bzeaman
6

OpenSSH не завершит сеанс оболочки, который некоторое время простаивал. Это не то, что делает OpenSSH. Завершение бездействующего сеанса оболочки не связано с конфигурацией OpenSSH.

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

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

Связанный:


Чтобы вывести sshdконфигурацию, используйте «расширенный тестовый режим» в качестве пользователя root:

sshd -T

Это описано в в sshd(8)руководстве (глядя OpenSSH_7.7, LibreSSL 2.7.2на OpenBSD здесь):

-T

Расширенный тестовый режим. Проверьте правильность файла конфигурации, выведите действующую конфигурацию в стандартный вывод и затем выйдите . При желании, правила соответствия могут применяться путем указания параметров соединения с использованием одного или нескольких -Cпараметров.

Эта опция была добавлена sshdдля OpenSSH 5.1 / 5.1p1 в 2008 году.

Кусалананда
источник
3

Если требуется закрыть соединение SSH после периода бездействия, сами оболочки предоставляют переменные времени ожидания.

Для Баш:

TMOUT: если задано значение больше нуля, TMOUT рассматривается как таймаут по умолчанию для встроенной функции чтения. Команда выбора завершается, если ввод не поступает через TMOUT секунд, когда ввод поступает с терминала. В интерактивной оболочке значение интерпретируется как количество секунд ожидания ввода после выдачи основного приглашения. Bash завершается после ожидания в течение этого количества секунд, если ввод не поступает.

проверьте это, запустив TMOUT=10и подождите 10 секунд, чтобы закрыть соединение.

Для tcsh:

Переменная оболочки autologout может быть установлена ​​для выхода из системы или блокировки оболочки после определенного количества минут бездействия.

В tcsh синтаксис для установки таймаута на десять минут таков set autologout=10. Это не работает в оригинальном csh.

Сандип Кумар Сингх
источник
-2

Если вы хотите, чтобы время ожидания составляло 10 секунд для всех, выполните следующие действия для конфигурации сервера (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Если вы хотите, чтобы таймаут составлял 10 секунд для локальных клиентов, сделайте следующее для конфигурации клиента (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Если параметр AliveCountMax не равен нулю, он, вероятно, не будет работать, потому что сервер ответит сбросом таймера (если только нет проблемы с подключением). Вы можете убедиться в этом, запустив клиент ssh с включенной отладкой.

JohnÂ?
источник