Як запобігти виникненню сеансу SSH у терміналі OS X?


84

Коли я закрийте мою MacBook з активним сеансом SSH в терміналі, а потім пробудження, підказка перестає відповідати.

Через п'ять хвилин це говорить

Write failed: Broken pipe

і припиняється.

Це також відбувається, коли я не вводити що-небудь на терміналі приблизно через п'ятнадцять хвилин.

Чи можу я змусити OS X:

  1. Тримайте SSH-з'єднання живим протягом тривалого часу
  2. Вбийте його негайно як тільки він не реагує

?

Відповіді:


105

Для підтримання зв'язку живим Ви можете зареєструватися /etc/ssh/ssh_config лінія, де він говорить ServerAliveInterval, що говорить вам, як часто (в секундах) ваш комп'ютер буде відправляти нульовий пакет, щоб підтримувати з'єднання. Якщо у вас є 0, що вказує, що ваш комп'ютер не намагається зберегти з'єднання (він вимкнено), інакше він повідомляє, як часто (в секундах) він надсилає вищезгаданий пакет. Спробуйте покласти 120 або 240, якщо він все ще вбиває ваше з'єднання, ви можете піти нижче, може бути, до 5, якщо з цим числом це не відбудеться, можливо, це ваш маршрутизатор, який скидає з'єднання для вільної пам'яті.

За його вбивство, коли він зависає , ви можете використовувати символ ssh:

~.

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


2
Добре, ви можете убити зв'язок з ~., відмінна порада! Але що це насправді?
CousinCocaine

Єдине, що мене збентежило, було чи потрібно мені перезапускати sshd, але здається, що просто вихід із сеансу і повторне підключення справили свою справу.
dgig

Часто ~. не працює для мене кілька хвилин. Чому так?
Sridhar-Sarnobat

2
Розташування ssh_config є /etc/ssh/ssh_config на Mac OS X. Я б сам відредагував відповідь, але не маю достатньо представників на цьому сайті, щоб це зробити.
Erik B

я повинен помістити це в клієнт або сервер? Я думаю, що клієнт, але може бути ясніше.
EralpB

18

Ти можеш:

Налаштуйте систему, загальносистемно, для всіх підключень Редагуючи: / etc / ssh / ssh_config І додайте рядок:

ServerAliveInterval 10

Або на сервер ~ / .ssh / config

Host keepsdroppingme.com
   ServerAliveInterval 10

Що це, в основному, посилає зберегти живий пакет, кожні 10 секунд ...


8

Ви також можете спробувати скористатися дивовижною програмою mosh проекту . Він витончено справиться з мережевими втратами, машини засинають, і т.д.

Іншим більш заслуженим рішенням є використання tmux на віддаленому комп'ютері. У цьому випадку ви все одно можете отримати розбиту трубку, але якщо ви знову підключите вашу оболонку і програми будуть чекати так само, як ви їх залишили.


Насправді, це саме те, що я роблю зараз.
Dan

3

Різні відповіді тут конфліктують щодо точного шляху до конфігураційних файлів. Може бути, він відрізняється в різних unixes? Я пропоную прочитати сторінки системи на вашій системі!

В man ssh (1) , пошук тексту: config . У моїй системі, у мене є вибір як загальносистемних, так і конфігураційних файлів цього користувача (і шляхи незвичайно різні).

В man ssh_config (5) , пошук тексту: живий . На моїй системі, схоже, мені потрібно встановити обидві ServerAliveInterval і ServerAliveCountMax .

Що працювало для мене, на MacOS 10.12 Sierra, це поставити наступні два рядки в ~ / .ssh / config:

ServerAliveInterval 20
ServerAliveCountMax 180

Тепер я можу SSH на мій Ubuntu 16.04 сервер без відключення протягом 20 * 180 секунд = 1 година. Зробив мій день!


2

Автоматично повторно підключити ssh після переривання режиму сну або Wi-Fi

  1. Встановіть autossh з MacPorts або Homebrew: brew install autossh

  2. Відкрийте термінал і запустіть autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. Від'єднайте свій WiFi або поставте ваш Mac в режим сну.

  4. Коли ви повторно підключаєтеся до wifi, сеанс ssh автоматично відновиться.


Автоматично ssh після входу

Джон Стейсі написав повідомлення в блозі про автоматичну активацію ssh під час входу.

  1. Встановіть autossh з MacPorts або Homebrew: brew install autossh

  2. Створіть Автоматизація робочого процесу з сценарієм bash.

Automator shell script

  1. Йти до елементи входу в Системні налаштування .

System Preferences > Login items

  1. Додати Автоматизація робочого процесу до Елементи входу .

Login items


1

Додайте ці два рядки до /etc/ssh/ssh_config:

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