Який час очікування в режимі очікування для 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.


3
Деякі оболонки можуть бути встановлені для виходу після тайм-ауту. Це призведе до припинення сеансу ssh. Перевірте, чи встановлена ​​ваша змінна середовища TMOUT.
Кенстер

Відповіді:


23

У коментованих рядках sshd_configзазвичай відображаються параметри за замовчуванням. Це стосується всіх рядків у вашому запитанні. Ви можете перевірити це в sshd_configсторінках керівництва . Ось відповідні фрагменти:

TCPKeepAlive

      Вказує, чи повинна система надсилати повідомлення про збереження TCP на іншу сторону. Якщо вони будуть надіслані, загибель підключення або аварія однієї з машин буде помічена належним чином. Однак це означає, що з'єднання загинуть, якщо маршрут тимчасово не працює, а деяким людям це буде дратує. З іншого боку, якщо збереження TCP не надсилаються, сеанси можуть нескінченно висіти на сервері, залишаючи користувачів «привидів» та споживаючи ресурси сервера.

      За замовчуванням - "так" (для надсилання повідомлень про збереження TCP), і сервер помітить, якщо мережа виходить з ладу або клієнтський хост виходить з ладу. Це дозволяє уникнути нескінченно висячих сеансів.

      Щоб відключити повідомлення про збереження TCP, значення слід встановити на "ні".

      Цей варіант раніше називався KeepAlive.

ClientAliveCountMax

      Встановлює кількість активних повідомлень клієнта (див. Нижче), які можуть бути відправлені без sshd (8) отримання будь-яких повідомлень назад від клієнта. Якщо цей поріг буде досягнуто під час надсилання активних повідомлень клієнта, sshd відключить клієнта, припинивши сеанс. Важливо зазначити, що використання живих повідомлень клієнта дуже відрізняється від використанняTCPKeepAlive (нижче)(вище). Повідомлення в реальному часі клієнта надсилаються через зашифрований канал і тому не підлягають підробці. Параметр TCP keepalive, увімкнений функцією, TCPKeepAliveможна підключити. Механізм живих клієнтів є цінним, коли клієнт або сервер залежать від того, коли відомо, коли з'єднання стало неактивним.

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

ClientAliveInterval

      Встановлює інтервал тайм-ауту в секундах, після якого, якщо дані від клієнта не надійшли, sshd (8) надішле повідомлення через зашифрований канал, щоб запитати відповідь від клієнта. За замовчуванням 0, що вказує на те, що ці повідомлення не надсилаються клієнту. Ця опція стосується лише протоколу версії 2.


1
Виправте мене, якщо не так, але якщо між мною та машиною не було брандмауера (без конфігурацій за замовчуванням), я ніколи не відключався? Я знаю, що наш брандмауер скидає непрацюючі TCP-з'єднання через 60 хвилин, тож саме тут відбувається закриття непрацюючих з'єднань. Я просто хотів перевірити і перевірити, чи OpenSSH сам явно закриває сеанси. Я думаю, що відповідь "Ні", opensh не явно закриває непрацюючі з'єднання, але брандмауери зазвичай роблять. Налаштування, згадані у вашій відповіді, насправді допомагають зберегти з'єднання або належним чином припинити сеанс, якщо він побачить, що його було відмінено.
Банджер

2
У цитованому тексті йдеться про те, що за замовчуванням для ClientAliveInterval дорівнює 0, це означає, що він не визначає часовий інтервал, протягом якого з'єднання залишається відкритим. І все ж ми знаємо, що часовий інтервал за замовчуванням має деяке кінцеве значення. Тому здається, що повинен бути якийсь інший параметр, який визначає, як довго з'єднання залишається відкритим за замовчуванням. Якщо мій аналіз вище правильний, то припустимо, що і сервер, і клієнт - це машини Linux, на яких працює opensh, і обидва використовують усі параметри за замовчуванням. У цьому випадку, яка сторона встановлює за замовчуванням, яке її значення та де воно встановлено?
Бен Кроуелл

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


6
Корисно, але жодним чином не відповідає на питання.
bzeaman

6

OpenSSH не припиняє сеанс оболонки, який простоював деякий час. Це не те, що робить OpenSSH. Завершення сеансу оболонки в режимі очікування не пов'язане з конфігурацією OpenSSH.

Налаштування, які ви показуєте, пов'язані із тимчасовими очікуваннями, коли з'єднання припиняється і не пов'язане з оболонкою на віддаленому хості та тим, що користувач робить чи не робить там.

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

Пов'язані:


Щоб скинути sshdконфігурацію, використовуйте "розширений тестовий режим" як корінь:

sshd -T

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

-T

Розширений тестовий режим. Перевірте дійсність файлу конфігурації, виведіть ефективну конфігурацію на stdout і потім вийдіть . За бажанням, правила відповідності можуть бути застосовані, вказавши параметри з'єднання за допомогою одного або декількох -Cпараметрів.

Цю опцію було додано до sshdOpenSSH 5.1 / 5.1p1 у 2008 році.


3

Якщо вимога полягає в тому, щоб закрити SSH-з'єднання після періоду бездіяльності, самі оболонки забезпечують змінні таймауту.

Для баш:

TMOUT: Якщо встановлено значення, що перевищує нуль, TMOUT трактується як час за замовчуванням для вбудованого читання. Команда select закінчується, якщо вхід не надходить через TMOUT секунд, коли вхід надходить з терміналу. В інтерактивній оболонці значення інтерпретується як кількість секунд, які потрібно чекати на введення після видачі первинного запиту. Bash закінчується після очікування цієї кількості секунд, якщо вхід не надходить.

перевірити це, запустивши TMOUT=10і почекайте 10 секунд, щоб закрити з'єднання.

Для tcsh:

Змінна оболонки автовиходу може бути встановлена ​​для виходу або блокування оболонки після заданої кількості хвилин бездіяльності.

У tcsh синтаксис встановлення тайм-ауту на десять хвилин є set autologout=10. Це не працює в оригінальному файлі csh.


-2

Якщо ви хочете, щоб час очікування становило 10 секунд для всіх, зробіть наступне для конфігурації сервера (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Якщо ви хочете, щоб час очікування становив 10 секунд для місцевих клієнтів, зробіть наступне для конфігурації клієнта (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Якщо параметр AliveCountMax не дорівнює нулю, він, ймовірно, не працюватиме, оскільки сервер відповість на скидання таймера (якщо не виникає проблема з підключенням). Це можна побачити, запустивши ssh-клієнт із увімкненою налагодженням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.