Вопрос Как выйти из SSH-соединения?


Я подключаюсь к серверу через SSH для отправки сообщения на сервер сокетов с помощью команды типа:

ssh 181.169.1.2 -p 5566

После того, как соединение установлено, и я напишу сообщение и отправлю его, я не могу выйти из текстового режима. Мне разрешено вводить больше текста, и все.

Есть ли команда или комбинация клавиш, которая позволяет мне вернуться в командный режим?


183
2017-08-28 14:29


происхождения




ответы:


Как выйти из SSH-соединения?

Два пути:

  • закрытие сеанса оболочки, например. с exit с последующим Войти, или Ctrl-d обычно позволяет вам выйти из ssh обычно,
  • в случае, если у вас плохое соединение, и оболочка не отвечает, нажмите Войти , затем введите ~. и ssh должен немедленно закрыть и вернуть вас в командную строку.

Первый вариант должен быть интуитивным, но как узнать последний вариант?

Мы могли бы изучить эту информацию из тщательного прочтения справочной страницы.

$ man ssh

дает нам документация SSH, который имеет следующий раздел о escape-символах:

ESCAPE CHARACTERS
     When a pseudo-terminal has been requested, ssh supports a number of
     functions through the use of an escape character.

     A single tilde character can be sent as ~~ or by following the tilde by
     a character other than those described below.  The escape character
     must always follow a newline to be interpreted as special.  The escape
     character can be changed in configuration files using the EscapeChar
     configuration directive or on the command line by the -e option.

     The supported escapes (assuming the default ‘~’) are:

     ~.      Disconnect.

     ~^Z     Background ssh.

     ~#      List forwarded connections.

     ~&      Background ssh at logout when waiting for forwarded connection
             / X11 sessions to terminate.

     ~?      Display a list of escape characters.

     ~B      Send a BREAK to the remote system (only useful if the peer sup‐
             ports it).

     ~C      Open command line.  Currently this allows the addition of port
             forwardings using the -L, -R and -D options (see above).  It
             also allows the cancellation of existing port-forwardings with
             -KL[bind_address:]port for local, -KR[bind_address:]port for
             remote and -KD[bind_address:]port for dynamic port-forwardings.
             !command allows the user to execute a local command if the
             PermitLocalCommand option is enabled in ssh_config(5).  Basic
             help is available, using the -h option.

     ~R      Request rekeying of the connection (only useful if the peer
             supports it).

     ~V      Decrease the verbosity (LogLevel) when errors are being written
             to stderr.

     ~v      Increase the verbosity (LogLevel) when errors are being written
             to stderr.

63
2017-09-16 21:57



Я не считаю раздел «как узнать этот» особенно полезным, потому что для меня это означает, что существует какое-то очевидное решение, когда я не считаю его особенно интуитивным, что я бы «man ssh «найти, как отключиться. Как бы я нашел, например, «выход»? Я согласен, что хорошо подтвердить проверку страниц руководства, когда сможете. - Alexander Pritchard
@AlexanderPritchard Я обновил свой ответ, чтобы более подробно объяснить, что мы здесь делаем. Если вы обнаружите, что страница руководства трудно понять, сообщите о проблеме с сопровождающим или, что еще лучше, отправьте запрос на вытягивание с (безусловным хорошим) улучшением. - Aaron Hall
Это звучит хорошо в теории, но на практике многие люди пытаются понять, как управлять этими командами, потому что даже знание того, как искать информацию, которую вы хотите, предполагает, что люди контекста не имеют. Подача проблемы с сопровождающими и подача запросов на тягу с улучшениями идет еще дальше. Я не утверждаю, что справочные страницы полезны, но если они были столь же полезны, как некоторые, они кажутся мне, я бы не использовал Stack Exchange. Я хочу быть предельно ясным, я думаю, что ваш ответ в порядке, и что люди должны проверять страницы руководства, но они не являются всеохватывающими. - Alexander Pritchard
«если бы они были столь же полезны, как некоторые, чтобы они казались, я бы не использовал Stack Exchange». Я согласен, и поэтому я стараюсь писать хорошие ответы. Цитирование и цитирование справочных источников не означает, что кто-то чувствует себя глупым или плохим, поскольку он не читал из этого источника, это делается для того, чтобы предоставить дополнительные доказательства того, что в противном случае было бы, возможно, очевидным утверждением факта, а также информировать пользователя о том, может храниться соответствующая информация. Вы хотите знать, что вы делаете семантически правильную вещь, а также знаете, что она работает. - Aaron Hall


Краткий ответ: Тип exit

Если это не работает, однако ...

SSH Escape Персонаж и Отключить Последовательность

Большинство реализаций SSH реализуют escape-символ для интерактивных сеансов, аналогично telnet Ctrl-] сочетание. Эквивалентный символ SSH по умолчанию ~, введенный в начале строки.

Если вы хотите завершить интерактивную сессию OpenSSH который застревает и не может быть завершен путем ввода exit или CtrlD в оболочку на удаленной стороне, вы можете ввести ~ а затем точка ., Чтобы ввести escape-символ в начале строки ввода, сначала необходимо нажать Enter. Таким образом, следующая последовательность в большинстве случаев прекратит сеанс SSH:

Войти~,

Другие escape-последовательности

OpenSSH, например, предлагает другие escape-последовательности, кроме ~., входящий ~? во время сеанса должен предоставить вам список. Некоторые примеры:

  • ~ с последующим Ctrl-Z приостанавливает сеанс,
  • ~& помещает его прямо в фон,
  • ~# дает список переадресованных соединений в этом сеансе.
  • Если вы хотите просто ввести тильду в начале строки, вам нужно удвоить ее: ~~,

Эквивалентный символ можно изменить с помощью опции командной строки -e, Если вы установите специальное значение -e none, экранирование отключено и сеанс полностью прозрачен.

Смотрите также справочная страница OpenBSD по ssh (на который ссылается www.openssh.org) под -e опция командной строки


254
2017-07-17 09:26



Почему это просто, когда вы можете сделать это бесполезно сложным? - MariusMatutiae
@MariusMatutiae OP запросил случай, когда удаленной оболочки не было exit или Ctrl-D, а просто процесс прослушивания. Я четко заявил, что мое решение подходит для сеанса который застревает и не может быть выведен, Я попытался прояснить это больше, надеюсь, теперь это легче увидеть. - Dubu
Я был настроен скептически, но ~. без пробелов было именно то, что мне нужно, спасибо! :) - Jamey
В швейцарской раскладке клавиатуры, тильда генерируется нажатием AltGr + ^ (плюс это блокирующий ключ). Из-за этого кажется, что escape-последовательность не работает. Кто-нибудь знает, как вводить бег по умолчанию в швейцарском немецком? - Daniel Alder
@Dobu Нашел причину, почему он не работал раньше. Если вы уже набрали ~ в той же строке (что легко произойдет, если вы тестируете), следующее ~. последовательности игнорируются. Пришлось нажать сначала ... - Daniel Alder


Вы хотите выйти из оболочки SSH?

Вы можете ввести exit и ударил Войти, или использовать Ctrl+D 


33
2017-08-28 18:37



«exit» помог мне, так как ctrl + d не работал в VNC viewer ... thanks - raj gupta
Это не работает в тех случаях, когда машина зависает или исчезает, или приложение не отвечает на какой-либо вход - Daniel Alder


Просто введите exit или logout (тогда нажмите Enter, конечно), оба будут работать.


11
2018-04-14 15:00





Ты можешь написать logout в консоли (и нажмите Войти конечно).


4
2017-07-17 07:12





Я вижу, что вопрос адекватно ответил, но я хотел бы добавить, что вижу, что вы подключаетесь к этому серверу через ssh на порту 5566. Я читаю один раз этот сайт что передача через SSH на непривилегированных портах (все выше 1023) является небезопасной.

Когда вы регистрируетесь в системе как пользователь без полномочий root (кто-то не является uid 0), вы не можете создать список TCP или UDP-портов ниже 1024. Это связано с тем, что номера портов ниже 1024 являются так называемыми привилегированными портами и могут быть только открытые корнем или процессы, выполняемые с правами root. Например, когда ваш веб-сервер (apache, nginx и т. Д.) Запустится, он сделает это как привилегированный пользователь root, чтобы открыть прослушивающее соединение с портом 80 (порт, который по умолчанию будет использоваться для HTTP-трафика). Теперь, как только порт будет открыт, и все, что нужно сделать с правами root, будет выполнено, веб-сервер вернется к не-привилегированному пользователю (либо www-data, apache, либо никому). С этого момента, когда происходит что-то плохое, оно ограничено только правами, которые имеет этот пользователь. Теперь вернемся к SSH: когда мы запускаем SSH на порте 22, мы знаем, что это делается с помощью корневого или корневого процесса, поскольку никакой другой пользователь не может открыть этот порт. Но что произойдет, когда мы переместим SSH на порт 2222? Этот порт можно открыть без привилегированной учетной записи, что означает, что я могу написать простой скрипт, который прослушивает порт 2222 и имитирует SSH, чтобы захватить ваши пароли. 

Поэтому, когда я сам меняю порт, я всегда использую порт ниже 1024, который еще не используется другим стандартным программным обеспечением. Там хороший список Википедия для этого.

Автор статьи также считает, что изменение порта SSH не должно быть сделано вообще по соображениям совместимости.

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

Я лично считаю, что есть случаи, когда это пригодится. Например, когда вы или небольшая группа людей являются единственными, кто подключается к серверу через SSH, вы регистрируете автоматические атаки с использованием грубой силы, и вы хотите, чтобы журнал был чистым.


4
2017-07-19 06:59



Конечно ... Это много текста, хотя я не хотел спама. :) Но вы аргумент хороший. - Ogier Schelvis
По моему опыту, то, что вы пишете здесь, является правдивым, но да, все должны учитывать эти факты о зарезервированных портах, так или иначе, что здесь не проблема. Спасибо за ваш ответ, хотя! - Andreea
Если какая-то часть не правильная, мне любопытно, что это такое. - Ogier Schelvis
Я просто дам вам первый: вы не должны использовать порт ниже 1024; список используемых портов начинается с нуля. Рекомендуется использовать порты выше 63737. Но вы должны учитывать тот факт, что если вы не установили на свой сервер, например, Polipo, который использует порт 8123, допустимо использовать его, пока не будет установлен polipo (и то никто не помнит об изменении порта: P) - Andreea
Вот что может быть неправильным: описанная проблема заключается в том, что кто-то совершает локальную атаку. Надеемся, что администраторы, подключенные к основным инфраструктурным устройствам, доверяют. Есть еще много портов выше 1024, чем ниже. Таким образом, скрытие службы на более высоком порту может помочь предотвратить / задержать работу удаленных сканеров портов, которые ориентированы на наиболее часто используемые порты. Если кто-то сканирует порт на более высоких портах, IDS может установить предупреждение (и, возможно, развернуть методы IPS). Ограничение до <1024 ограничивает ваши защитники (доверенные локальные администраторы) и сужает вещи для более вероятного и менее доверенного вектора атаки: remote - TOOGAM


Это поддерживаемые символы, которые предоставляют различные варианты, с которыми вы можете играть с помощью ssh.

Поддерживаемые escape-последовательности:

 ~.  - terminate session

 ~B  - send a BREAK to the remote system

 ~R  - Request rekey (SSH protocol 2 only)

 ~#  - list forwarded connections

 ~?  - this message

 ~~  - send the escape character by typing it twice

(Обратите внимание, что escape-коды распознаются только сразу после новой строки.) Вы можете закрыть список эпизодов Escape, нажав Войти,


3
2018-06-14 22:26





MacOS: когда ssh зависает, используйте следующую последовательность:

ENTER 
SHIFT+`
.

где: Shift + `  производит ~ (символ тильды)


1
2018-03-29 17:25