Вопрос или проблема
Я знаю, что могу ввести exit, logout или нажать Ctrl–D для выхода из системы обычным образом. Ничто из этого не работает, когда сервер истек по времени, но, к счастью, я могу сделать Enter-~-., чтобы выйти из сессии.
Тем не менее, это возвращает меня обратно к моей локальной сессии и завершает все переходы. Как мне просто выйти из текущей ssh-сессии и не завершать предыдущие переходы?
Нажмите ~ дважды, чтобы отправить один буквальный ~
на удалённую сессию.
Таким образом, если вы находитесь в трёх сессиях, то ~~~.
выйдет из 3 уровня ‘ssh’ (т.е. это заставляет первого клиента ssh отправить ~~.
второму, и оттуда это становится ~.
для третьего).
В качестве альтернативы: используйте ssh -e ...
, чтобы указать другой символ экранирования для каждого уровня, который не будет интерпретироваться другими уровнями.
Ответ или решение
При возникновении ситуации, когда SSH-сессия истекла, пользователю не всегда удаётся выйти из сессии обычными способами, такими как команда exit
, logout
или нажатие сочетания клавиш Ctrl–D. В такой ситуации может быть полезно воспользоваться специальными управляющими символами SSH для закрытия только текущей сессии, ни в коем случае не прерывая более ранние подключения.
Как выйти из истекшей SSH-сессии, не выходя из других подключений
Метод 1: Использование двойного символа ~
Первый и наиболее простой способ — это отправить двойной символ ~
. Последовательность комбинации:
- Нажмите клавишу Enter
- Затем введите ~ и повторите её ещё раз.
Таким образом, экранируется последовательность для отправки одного символа ~
в удалённую сессию, что и позволяет корректно завершить только текущую сессию. Если вы находитесь на третьей вложенной сессии (т.е. через три подключения SSH), то вам нужно будет воспользоваться следующей комбинацией:
- Для выхода из третьей сессии: ~~~.. Это будет интерпретировано как ~. для второй сессии, и, в конце концов, удалённая сессия закроется.
Метод 2: Изменение символа экранирования
Если необходимо избежать путаницы между сессиями, можно использовать параметр -e
для задания уникального символа экранирования для каждой сессии SSH. Это позволяет передавать управляющие символы корректно на каждом уровне. Например, можно указать разный символ экранирования при каждом новом подключении:
ssh -e "!" user@host
Таким образом, вместо стандартного ~, вы можете использовать !, что обеспечит более четкую идентификацию уровня сессии.
Заключение
Каждый из предложенных методов позволяет вам эффективно управлять несколькими SSH-сессиями, не нарушая комфортный рабочий процесс. Операции по закрытию сессий требуют понимания механизмов работы SSH, поэтому всегда старайтесь тщательно настраивать свои соединения и выбирать подходящий метод для эффективной работы.