Чтобы сохранить соединение живым , вы можете проверить в /etc/ssh/ssh_configстроке, где оно говорит ServerAliveInterval, говорит вам, как часто (в секундах) ваш компьютер будет отправлять нулевой пакет, чтобы поддерживать соединение живым. Если у вас есть 0, это указывает на то, что ваш компьютер не пытается поддерживать соединение активным (оно отключено), в противном случае он сообщает вам, как часто (в секундах) он отправляет вышеупомянутый пакет. Попробуйте ввести значение 120 или 240, если оно все еще убивает ваше соединение, вы можете понизиться, может быть до 5, если с этим номером этого не произойдет, возможно, именно ваш маршрутизатор сбрасывает соединение в свободную память.
Чтобы убить его, когда он зависнет , вы можете использовать escape-символ ssh:
~.
То есть, нажмите тильду, а затем точку, если она не работает, нажмите Enter перед тем, как нажать, что немедленно прервет соединение.
Хорошо, вы можете разорвать связь ~., отличный совет! Но что это на самом деле делает?
Кузен Кокаин
Единственное, что меня смутило, было ли мне нужно перезапустить sshd или нет, но похоже, что выход из сеанса и повторное подключение сделали
свое дело
Часто ~. не работает для меня в течение нескольких минут. Почему это?
Шридхар Сарнобат
2
Расположение ssh_configнаходится /etc/ssh/ssh_configна Mac OS X. Я бы редактировать Ответ на этот вопрос сам, но я не хватает респ на этом сайте , чтобы сделать это.
Эрик Б
я должен положить это в клиент или сервер? Я думаю, что клиент, но может быть понятнее.
EralpB
23
Ты можешь:
Сконфигурируйте свою систему для всей системы для всех соединений. Отредактировав : / etc / ssh / ssh_config
и добавив строку:
ServerAliveInterval10
Или для каждого сервера ~ / .ssh / config
Host keepsdroppingme.comServerAliveInterval10
Что это в основном делает, отправляет пакет live keep каждые 10 секунд ...
Вы также можете попробовать использовать удивительный проект mosh . Он будет корректно обрабатывать потери в сети, отключать машины и т. Д. И успешно восстанавливать соединение, когда у вас снова будет рабочая сеть.
Еще одно проверенное временем решение - использовать tmux на удаленной машине. В этом случае вы все равно можете получить сломанный канал, но если вы переподключите свою оболочку, приложения будут ждать, как только вы их покинули.
Различные ответы здесь противоречат точному пути к файлам конфигурации. Может в разных юниксах по-разному? Я предлагаю прочитать справочные страницы в вашей системе!
В man ssh (1) найдите текст: config . В моей системе у меня есть выбор файлов конфигурации для всей системы или для этого пользователя (и пути странно разные).
В man ssh_config (5) ищите текст: жив . В моей системе, похоже, мне нужно установить ServerAliveInterval и ServerAliveCountMax .
В macOS 10.12 Sierra у меня работает то, что я поместил следующие две строки в ~ / .ssh / config:
ServerAliveInterval20ServerAliveCountMax180
Теперь я могу подключиться к серверу Ubuntu 16.04 без отключения в течение 20 * 180 секунд = 1 час. Сделал мой день!
Только что решил эту проблему, добавив следующие строки $HOME/.ssh/config.
Host*ServerAliveInterval120TCPKeepAlive no
Параметр TCPKeepAlive noуказывает клиенту просто предполагать, что соединение по-прежнему исправно, пока пользовательский запрос не подтвердит обратное, а это означает, что временные разрывы соединения, пока ваш термин ssh бездействует в фоновом режиме, не разрушают соединение.
~.
, отличный совет! Но что это на самом деле делает?ssh_config
находится/etc/ssh/ssh_config
на Mac OS X. Я бы редактировать Ответ на этот вопрос сам, но я не хватает респ на этом сайте , чтобы сделать это.Ты можешь:
Сконфигурируйте свою систему для всей системы для всех соединений. Отредактировав : / etc / ssh / ssh_config и добавив строку:
Или для каждого сервера ~ / .ssh / config
Что это в основном делает, отправляет пакет live keep каждые 10 секунд ...
источник
Вы также можете попробовать использовать удивительный проект mosh . Он будет корректно обрабатывать потери в сети, отключать машины и т. Д. И успешно восстанавливать соединение, когда у вас снова будет рабочая сеть.
Еще одно проверенное временем решение - использовать tmux на удаленной машине. В этом случае вы все равно можете получить сломанный канал, но если вы переподключите свою оболочку, приложения будут ждать, как только вы их покинули.
источник
Различные ответы здесь противоречат точному пути к файлам конфигурации. Может в разных юниксах по-разному? Я предлагаю прочитать справочные страницы в вашей системе!
В man ssh (1) найдите текст: config . В моей системе у меня есть выбор файлов конфигурации для всей системы или для этого пользователя (и пути странно разные).
В man ssh_config (5) ищите текст: жив . В моей системе, похоже, мне нужно установить ServerAliveInterval и ServerAliveCountMax .
В macOS 10.12 Sierra у меня работает то, что я поместил следующие две строки в ~ / .ssh / config:
Теперь я могу подключиться к серверу Ubuntu 16.04 без отключения в течение 20 * 180 секунд = 1 час. Сделал мой день!
источник
Автоматически переподключать SSH после прерывания сна или Wi-Fi
Установите autossh из MacPorts или Homebrew:
brew install autossh
Откройте терминал и запустите
autossh -M 20000 -f [SSH ARGUMENTS GO HERE]
Отключите Wi-Fi или переведите Mac в режим сна.
Когда вы переподключитесь к Wi-Fi, сессия SSH будет автоматически переподключена.
Автоматически SSH после входа в систему
Джон Стейси написал в блоге сообщение об автоматической активации сеанса SSH при входе в систему.
Установите autossh из MacPorts или Homebrew:
brew install autossh
Создайте рабочий процесс Automator с помощью bash-скрипта.
источник
Добавьте эти две строки в
/etc/ssh/ssh_config
:источник
Только что решил эту проблему, добавив следующие строки
$HOME/.ssh/config
.Параметр
TCPKeepAlive no
указывает клиенту просто предполагать, что соединение по-прежнему исправно, пока пользовательский запрос не подтвердит обратное, а это означает, что временные разрывы соединения, пока ваш термин ssh бездействует в фоновом режиме, не разрушают соединение.источник