Як запобігти відключенню SSH, якщо він деякий час не працює


51

У мене є ssh-з'єднання з машиною, яка відключається цією машиною через 30 хвилин без введення користувача. Однак якщо я розпочну щось подібне top, зв’язок залишається живим. Оскільки це машина клієнта, я не можу переконфігурувати SSH-сервер цієї машини. Тому я шукаю спосіб автоматичного виявлення неробства та початку чогось подібного top. Вид "заставки" для Bash.

Я знаю, що можу це зробити за допомогою screen, але, на жаль, screenце не встановлено, і я не можу встановити програмне забезпечення. Тому мені потрібно використовувати те, що пропонує Баш.

Щоб було зрозуміло: я шукаю рішення, яке розпочну один раз після входу в систему, а потім хочу скористатися цим терміналом, піти подалі, повернутися через дві години і продовжувати роботу, не набираючи нічого перед тим, як піти. Крім того, я не дивлюся на тунельні речі (для цього рекомендую чудовий переклад )

Будь-які ідеї?


Просто швидка примітка, щоб зробити прозорий екран і Keepalive - це не те саме: наприклад, якщо відключено або ssh-клієнт, або серверний жест, ваш сеанс ssh буде припинено, навіть якщо у вас буде KeepAlive, тоді як оболонка екрана не припиниться .
MariusMatutiae

Відповіді:


78

Щоб було зрозуміло: я шукаю рішення, яке розпочну один раз після входу в систему, а потім хочу скористатися цим терміналом, піти подалі, повернутися через дві години і продовжувати роботу, не набираючи нічого перед тим, як піти.

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

Виправлення Linux / Unix / Cygwin OpenSSH :
найпростіший виправлення полягає в тому, щоб включити ssh client keepalives; цей приклад надсилатиме ssh keepalive кожні 60 секунд:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Якщо ви хочете ввімкнути це на всіх своїх сесіях, помістіть це у свій /etc/ssh/ssh_configабо ~/.ssh/config:

ServerAliveInterval 60

Для отримання додаткової інформації див. ssh_configСторінку

Виправлення шпаклівки :

Збережіть це у вашому PuTTY "Налаштування за замовчуванням" ...

  • Клацніть на З'єднання
  • Введіть 60 у "Секунди між кипаловидами"

putty_screenshot


21

Окрім відповіді Майка Пеннігтона , я також хотів би вас зрозуміти ServerAliveCountMax.

  • ServerAliveIntervalПошле Keepalive кожні х секунд ( по замовчуванням 0 , який відключає цю функцію , якщо не встановлено на що - то інше).
  • Це буде зроблено ServerAliveCountMaxраз, якщо відповіді не буде отримано. Значення за замовчуванням ServerAliveCountMax- 3 (див. Manpage ssh_config ).

Приклад: Якщо ви встановили ServerAliveIntervalна 60 і відпустки , ServerAliveCountMaxяк це, це означає , що KeepAlive чекатиме тільки 3 * 60 = 180 seconds = 3 хвилини , перш ніж пам'ятається.

Щоб збільшити це, наприклад, до 2 годин спроби зберегти зв’язок живим, ви можете зробити:

За команду:

Тому слід розглянути питання про встановлення

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Постійні:

Щоб зробити його стійким, напишіть його /etc/ssh/ssh_config(застосовуватиметься на всій системі) або ~/.ssh/config(застосовуватиметься лише для користувачів):

ServerAliveInterval 60
ServerAliveCountMax 120

Примітка

Як правильно вказано на дисклі , це може бути не тим, чого ви хочете, залежно від вашої ситуації:

  • Якщо ви хочете швидко припинити сеанс, як тільки сервер більше не відповідає, вам слід вибрати низьке значення ServerAliveCountMax.
  • Якщо ви більше зацікавлені у збереженні вже встановленого зв’язку (наприклад, ви їдете на поїзді та маєте велику затримку), вам слід вибрати більш високе значення, ServerAliveCountMaxщоб дозволити sshпродовжувати намагатися відновити з'єднання.

Дивись також:


1
Перепрошую, але це неправильно. ServerAliveCountMaxвказує кількість живих повідомлень сервера, які можуть бути відправлені без отримання жодного повідомлення з сервера. Якщо ви хочете , sshщоб вийти після того, як вона замерзає (так що ви можете перезапустити його) , ви повинні дійсно встановити ServerAliveCountMaxна низьке число. Ознайомтесь із пов’язаною робочою сторінкою .
dislick

@dislick Мені довелося трохи подумати над цим, але я вважаю, що ти маєш рацію залежно від контексту, тому я додав замітку, щоб підкреслити контекст.
Мурмель

2

Я використовую Mobaxterm і також зіткнувся з цією проблемою. Mobaxterm також постачається з можливістю підтримувати клієнта живим, коли клієнт не працює. Перейти до Settings -> Configuration -> SSH. Є розділ під назвою SSH settings, перевірте варіант SSH keepalive. Тоді проблема повинна зникнути.

введіть тут опис зображення


чи працює "SSH keepalive" у безкоштовній редакції ... моя сесія відключається навіть після перевірки цього параметра
samshers

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