Гид по технологиям

Как завершить зависшую SSH‑сессию и перейти на Mosh

5 min read Сетевое администрирование Обновлено 30 Nov 2025
Как завершить зависшую SSH‑сессию и перейти на Mosh
Как завершить зависшую SSH‑сессию и перейти на Mosh

Настенный телефон-автомат на крючке

Почему SSH-сессии зависают

Чаще всего SSH «зависает» из-за потери сетевого соединения. Wi‑Fi может терять пакетную связь, ноутбук может уйти в спящий режим, или вы случайно закрыли крышку ноутбука. SSH изначально разрабатывался в эпоху проводных рабочих станций, поэтому он более хрупок при переключениях сетей и временных разрывах.

Коротко: SSH поддерживает интерактивный терминал через TCP. Если TCP-канал прерывается, клиент «виснет», поскольку он ждёт подтверждений от сервера.

1. Завершение через escape‑последовательность

Выход из SSH с помощью escape-последовательности

OpenSSH имеет внутренние escape‑символы. По умолчанию это тильда (~). Escape‑последовательность позволяет отправить команду клиенту, а не удалённой машине.

Стандартный приём для немедленного выхода из клиента SSH:

~.

То есть нажмите клавишу тильда, затем точку. Обратите внимание: тильда интерпретируется только если она идёт в начале строки после последнего ввода клавиатуры; если вы набирали текст, нажмите Enter, затем ~. и затем .

Если вы хотите изменить escape‑символ временно, используйте опцию -e:

ssh -e '#' user@host

Чтобы поменять его навсегда, добавьте запись в локальный файл ~/.ssh/config:

Host *
  EscapeChar ~

(Замените ~ на желаемый символ.)

Важно: escape‑последовательности работают в клиенте OpenSSH. Если вы используете другой клиент, проверьте его документацию.

2. Завершение процесса через kill

Поиск SSH-процесса через ps и grep

Если escape не срабатывает или клиент полностью заморожен, можно завершить процесс вручную.

Найдите PID с помощью ps и grep:

ps aux | grep ssh

В выводе ищите строку с вашим пользователем и адресом удалённого хоста — так вы отличите нужную сессию от системных SSH‑процессов.

Когда PID найден, отправьте сигнал TERM или KILL:

kill 
# если нужно принудительно:
kill -9 

Сигнал TERM даёт процессу шанс корректно завершиться. Используйте kill -9 только если TERM не сработал.

Используйте Mosh для устойчивых соединений

Удалённый Vim через Mosh при отключенной сети

Mosh (Mobile Shell) — это замена SSH для интерактивных терминалов. Он использует UDP и состояние на стороне клиента, поэтому продолжает работать при кратковременных потерях сети и при смене IP (например, переход с Wi‑Fi на сотовую сеть). При восстановлении Mosh синхронизирует ввод/вывод, и вы не теряете работу.

Установка Mosh на популярных дистрибутивах:

sudo apt install mosh
sudo pacman -S mosh
sudo dnf install mosh

Mosh хорошо сочетается с tmux или GNU Screen: Mosh обеспечивает устойчивое сетевое соединение, tmux — возможность восстановить сессию и процессы на удалённой машине.

Альтернативные подходы

  • Использовать tmux/screen внутри SSH: если соединение разорвётся, вы вернётесь в тот же сеанс при повторном подключении.
  • Autossh: автоматический рестарт SSH‑туннелей (подходит для туннелей, но не для интерактивных терминалов).
  • SSH через стабильный промежуточный сервер (bastion) с постоянным сетевым каналом.

Методология диагностики зависшей сессии — шаг за шагом

  1. Нажмите Enter, затем ~. чтобы попыта��ься выйти через escape. Если клиент ответил — всё в порядке.
  2. Если нет реакции, переключитесь в локальную консоль (Ctrl+Alt+F2 на Linux) или откройте новый терминал.
  3. Выполните ps aux | grep ssh и найдите PID зависшего клиента.
  4. Попробуйте kill . Если после этого клиент не закрылся — kill -9 .
  5. Если подобные зависания происходят часто — установите Mosh и/или tmux.

Роли и чек‑листы

DevOps / Системный администратор:

  • Проверить логи сервера (journalctl /var/log/auth.log).
  • Настроить tmux на всех сервисных аккаунтах.
  • Развернуть Mosh на хостах, куда часто подключаются мобильные пользователи.

Разработчик / Инженер:

  • Использовать tmux для долгих задач.
  • Настроить в локальной машине alias для ssh с -o ServerAliveInterval=60 и -o ServerAliveCountMax=3.
  • Установить Mosh для ноутбука.

Служба поддержки:

  • Объяснить пользователю escape‑последовательность и команду kill.
  • Предложить Mosh или tmux как долгосрочное решение.

Критерии приёмки

  • После применения escape‑последовательности SSH‑клиент завершился или вернул приглашение.
  • После kill процесс SSH перестал присутствовать в ps aux.
  • После установки Mosh пользователь может продолжать ввод после краткого разрыва сети.

Когда методы не сработают

  • Если локальный терминал завис полностью (Xorg/Wayland или терминал-приложение упало), escape‑последовательность не сработает — нужно открыть новый терминал или перезапустить GUI‑сессию.
  • Если проблема на стороне сервера (OOM, crash), восстановить соединение можно только после устранения серверной ошибки.

Краткий глоссарий

  • SSH: протокол для безопасного доступа к удалённым машинам.
  • Mosh: мобильная оболочка, устойчивая к временным потерям сети (использует UDP).
  • tmux/screen: мультиплексоры терминала, позволяют возобновить сессию.
  • PID: идентификатор процесса в системе Unix.

Частые вопросы

Что делать, если escape‑последовательность не работает и я не вижу PID?

Откройте новый терминал и выполните ps aux | grep ssh; если клиент не отображается, возможно, он завис в состоянии ядра — перезапустите терминал или завершите GUI‑сессию.

Можно ли поменять escape‑символ, чтобы он не конфликтовал с рабочими командами?

Да. Используйте опцию -e при запуске SSH или настройку EscapeChar в ~/.ssh/config.

Краткое резюме

  • Попробуйте ~. для быстрого выхода.
  • Если это не помогает — найдите PID и используйте kill.
  • Для надёжных подключений используйте Mosh и/или tmux.

Важно: Mosh и tmux решают разные задачи — Mosh делает подключение устойчивым к сетевым разрывам, а tmux позволяет возобновлять рабочие процессы на сервере. Вместе они дают наиболее надёжный рабочий поток.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Копирование пользовательских представлений Outlook
Outlook

Копирование пользовательских представлений Outlook

Очистка Docker-образов и освобождение места
DevOps

Очистка Docker-образов и освобождение места

Обновить Cube WP10 до Anniversary Update
Мобильные устройства

Обновить Cube WP10 до Anniversary Update

Как проверить, запущен ли Docker daemon
DevOps

Как проверить, запущен ли Docker daemon

Как запланировать твит в Twitter
соцсети

Как запланировать твит в Twitter

docker cp — копирование файлов между хостом и контейнером
Docker

docker cp — копирование файлов между хостом и контейнером