Как выйти из истекшей SSH-сессии, не выходя из предыдущих переходов?

Вопрос или проблема

Я знаю, что могу ввести exit, logout или нажать CtrlD для выхода из системы обычным образом. Ничто из этого не работает, когда сервер истек по времени, но, к счастью, я могу сделать Enter-~-., чтобы выйти из сессии.

Тем не менее, это возвращает меня обратно к моей локальной сессии и завершает все переходы. Как мне просто выйти из текущей ssh-сессии и не завершать предыдущие переходы?

Нажмите ~ дважды, чтобы отправить один буквальный ~ на удалённую сессию.

Таким образом, если вы находитесь в трёх сессиях, то ~~~. выйдет из 3 уровня ‘ssh’ (т.е. это заставляет первого клиента ssh отправить ~~. второму, и оттуда это становится ~. для третьего).

В качестве альтернативы: используйте ssh -e ..., чтобы указать другой символ экранирования для каждого уровня, который не будет интерпретироваться другими уровнями.

Ответ или решение

При возникновении ситуации, когда SSH-сессия истекла, пользователю не всегда удаётся выйти из сессии обычными способами, такими как команда exit, logout или нажатие сочетания клавиш CtrlD. В такой ситуации может быть полезно воспользоваться специальными управляющими символами SSH для закрытия только текущей сессии, ни в коем случае не прерывая более ранние подключения.

Как выйти из истекшей SSH-сессии, не выходя из других подключений

Метод 1: Использование двойного символа ~

Первый и наиболее простой способ — это отправить двойной символ ~. Последовательность комбинации:

  • Нажмите клавишу Enter
  • Затем введите ~ и повторите её ещё раз.

Таким образом, экранируется последовательность для отправки одного символа ~ в удалённую сессию, что и позволяет корректно завершить только текущую сессию. Если вы находитесь на третьей вложенной сессии (т.е. через три подключения SSH), то вам нужно будет воспользоваться следующей комбинацией:

  • Для выхода из третьей сессии: ~~~.. Это будет интерпретировано как ~. для второй сессии, и, в конце концов, удалённая сессия закроется.

Метод 2: Изменение символа экранирования

Если необходимо избежать путаницы между сессиями, можно использовать параметр -e для задания уникального символа экранирования для каждой сессии SSH. Это позволяет передавать управляющие символы корректно на каждом уровне. Например, можно указать разный символ экранирования при каждом новом подключении:

ssh -e "!" user@host

Таким образом, вместо стандартного ~, вы можете использовать !, что обеспечит более четкую идентификацию уровня сессии.

Заключение

Каждый из предложенных методов позволяет вам эффективно управлять несколькими SSH-сессиями, не нарушая комфортный рабочий процесс. Операции по закрытию сессий требуют понимания механизмов работы SSH, поэтому всегда старайтесь тщательно настраивать свои соединения и выбирать подходящий метод для эффективной работы.

Оцените материал
Добавить комментарий

Капча загружается...