42

У меня есть ssh-соединение с машиной, которая отключается этой машиной после 30 минут отсутствия ввода пользователя. Однако, если я начну что-то вроде top , соединение останется живым. Поскольку это клиентская машина, я не могу перенастроить SSH-сервер этой машины. Поэтому я ищу способ автоматически определять праздность и запускать что-то вроде top . Вид "заставки" для Bash.

Я знаю, что я могу сделать это с screen , но, к сожалению, screen не установлен, и я не могу установить программное обеспечение. Поэтому мне нужно использовать то, что предлагает Bash.

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

Есть идеи?

3 ответа3

66

Чтобы было понятно: я ищу решение, которое я запускаю один раз после входа в систему, а затем хочу использовать этот терминал, уйти, вернуться через два часа и продолжить работу, ничего не печатая, прежде чем уйти.

Проблема в том, что есть что-то (обычно брандмауэр или балансировщик нагрузки), которое отбрасывает пустые сеансы. Если вы сконфигурируете сообщения активности сеанса, они будут препятствовать тому, чтобы сетевые устройства рассматривали сеанс как бездействующий.

Исправление для Linux / Unix / Cygwin OpenSSH:
Самое простое решение - включить поддержку активности клиента ssh; этот пример будет отправлять ssh keepalive каждые 60 секунд:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Если вы хотите включить это во всех ваших сессиях, поместите это в ваш /etc/ssh/ssh_config или ~/.ssh/config:

ServerAliveInterval 60

Для получения дополнительной информации см. ssh_config

Замазка исправить:

Сохраните это в вашем PuTTY "Настройки по умолчанию" ...

  • Нажмите на соединение
  • Введите 60 в "Секунды между keepalive"

putty_screenshot

15

В дополнение к ответу Майка Пеннигтона, я бы хотел, чтобы вы знали и о ServerAliveCountMax .

  • ServerAliveInterval будет отправлять keepalive каждые x секунд (по умолчанию 0, что отключает эту функцию, если не установлено другое значение).
  • НО это будет сделано только раз ServerAliveCountMax . Значение по умолчанию ServerAliveCountMax равно 3 (см. Man-страницу 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

Смотрите также:

1

Я использую Mobaxterm и также столкнулся с этой проблемой. Mobaxterm также поставляется с опцией, чтобы сохранить клиента живым, когда клиент простаивает. Зайдите в Settings -> Configuration -> SSH . Есть раздел под названием SSH settings , отметьте опцию SSH keepalive . Тогда проблема должна исчезнуть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .