Мне просто интересно об этом. Иногда я использую SSH как ssh ubuntu@example.com
а затем запускаю sudo -i
для входа в систему от имени пользователя root
.
Теперь я хочу отключиться и вернуться к исходному хосту. Я обычно ввожу команду exit
или сочетание клавиш Ctrl + D дважды, чтобы вернуться назад.
Мне интересно, возможно ли сделать это за один шаг, независимо от того, сколько раз вы использовали sudo
в удаленном соединении?
rlogin
. SSH имеет семантику старых программ BSD rlogin
и rsh
. Руководство OpenSSH не документирует эту семантику, так как они были задокументированы в старых руководствах rlogin
и rsh
коммерческих Unices. Одна часть этой семантики – это escape-последовательности, которые существуют в интерактивном сеансе rlogin
.
Escape-последовательности начинаются с escape-символа , за которым следует другой символ, определяющий фактическую последовательность. Они принимаются локальным клиентским концом соединения SSH. Чтобы в большинстве случаев удаленный конец мог использовать прозрачный символ перехода, он распознается только сразу после ввода новой строки. Кроме того, дублирующий экранирующий символ – это экранирующая последовательность, которая отображается для отправки одного escape-символа на удаленный конец, так что можно по-прежнему отправлять escape-символ сразу после новой строки, если это необходимо. (Это пример обычного Blast! Я думал, что нажал эту кнопку. Нажмите ее еще раз. Семантика пользовательского интерфейса. ☺)
Последовательность побега, представляющая особую важность для вас, – это символ побега, за которым следует . Стоп. Это отключает соединение SSH от локального конца.
Важное упущение в руководстве OpenSSH, которое можно найти в старом dloo rlogin
, заключается в том, что если у вас есть цепочка соединений, можно использовать механизм удвоения, чтобы гарантировать, что escape-последовательность обрабатывается любым последующим SSH-клиентом в цепь нужно.
Так (например) на хосте A, если кто-то использовал SSH для входа на хост B, а затем оттуда использовал SSH для входа на хост C, можно выполнить локальное отключение на соединении B → C, оставив A → B соединение не повреждено, набрав (сразу после новой строки) escape-символ дважды, а затем . , Соединение A → B декодирует это как один управляющий символ, который должен быть отправлен, а затем . который соединение B → C, в свою очередь, видит как escape-последовательность, командующую локально инициируемым разъединением. Это можно расширить очевидным логическим способом.
Сам символ выхода по умолчанию является тильдой, ~ , хотя, как говорит доко, это можно изменить двумя способами. Обратите внимание, что для того, чтобы напечатать это на раскладках клавиатуры, которые имеют мертвые клавиши, необходимо следовать за клавишей ~ (которая сама по себе может быть аккордом, требующей клавиш модификации, в зависимости от раскладки клавиатуры) через пробел, чтобы локальный клиент SSH даже сначала видит тильду в интерактивном вводе с терминала. Таким образом, ввод escape-последовательности разъединения (после новой строки) будет ~ ␠ . и локальное отключение для одного перехода также будет ~ ␠ ~ ␠ . ,
rlogin
. Руководство пользователя HP-UX 11i, версия 2. Hewlett-Packard. Август 2003 г. rlogin
” . Руководство пользователя Solaris Advanced . 806-7612-11. Sun Microsystems. 2002. Вы должны быть в состоянии сделать это, используя ~ + . комбинация клавиш. Это должно полностью завершить сеанс ssh, независимо от того, сколько разных пользовательских сеансов у вас в нем.
Если вы используете jumphosts и / или терминальные серверы для доступа к вашему серверу, вам нужно добавить ~ в последовательность. Таким образом, если вы подключитесь по SSH к серверу, прежде чем войти в систему на сервере, последовательность отключений от сервера будет ~ + ~ + . , В старом стиле telnet и последовательные соединения также есть эта опция escape. С помощью ssh -e @ user@server.example.org
управляющий символ изменяется с ~ (по умолчанию) на @ для этого соединения.
Ответ, вероятно, нет.
Выход из двух сессий одновременно может в какой-то момент нарушить некоторые предположения или лучшие практики. Например, в оболочке bash есть некоторое предупреждение, если у вас есть какие-то задания в фоновом режиме. Кроме того, история оболочки может быть потеряна.
Подсказка клавиши переключения, упомянутая Jesse_b, хороша, но имеет вышеупомянутый откат
Если вы заранее знаете, что не хотите нажимать Ctrl-D дважды, вы можете вызвать:
exec sudo -i
Но у этого все еще есть некоторый недостаток, упомянутый выше.
Ctrl-D дважды определенно единственная лучшая практика, о которой я могу думать