Як вийти з з'єднання SSH?


245

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

ssh 181.169.1.2 -p 5566

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

Чи є команда або комбінація клавіш, яка дозволяє мені повернутися в режим команд?

Відповіді:


156

Як вийти з з'єднання SSH?

Два способи:

  • закриття сеансу оболонки, наприклад, з exitнаступним Enter, або Ctrl- dзазвичай дозволяє sshнормально вийти з сеансу,
  • у випадку, якщо у вас поганий зв’язок, а оболонка не відповідає, натисніть Enterклавішу, після чого введіть ~.і ssh слід негайно закрити і повернути вас у ваш командний рядок.

Перший варіант повинен бути інтуїтивно зрозумілим, але як ми знаємо останній варіант?

Цю інформацію ми могли б дізнатися, якщо уважно прочитати довідкову сторінку.

$ man ssh

надає нам документацію SSH , в якій є наступний розділ про символи втечі:

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.

Я не вважаю розділ "як ми це знаємо" особливо корисним, тому що для мене це означає, що існує якесь очевидне рішення, коли я не вважаю це особливо інтуїтивно зрозумілим, що я б "людина ssh ", щоб знайти, як відключити. Як я знайшов, наприклад, "вихід"? Я погоджуюсь, що добре підтвердити перевірку довідкових сторінок, коли зможете.
Олександр Притчард

@AlexanderPritchard Я оновив свою відповідь, щоб більш ретельно пояснити, що ми тут робимо. Якщо вам важко зрозуміти сторінку чоловіка, надішліть проблему з технічним обслуговувачем, а ще краще, надішліть запит на тягу з (некваліфічно хорошим) покращенням.
Аарон Холл

1
Теоретично це звучить добре, але на практиці багато людей намагаються зрозуміти, як орієнтуватися в цих командах, тому що навіть знаючи, як шукати потрібну інформацію, передбачається, що у людей немає контексту. Подання проблеми з обслуговуючими особами та подання запитів на тягнення з поліпшеннями ще більше перевищує це. Я не заперечую, що довідкові сторінки корисні, але якби вони були настільки ж корисними, як деякі з них, здаються, я б не використовував Stack Exchange. Я хочу бути зрозумілим. Я вважаю, що ваша відповідь чудова, і що люди повинні перевіряти сторінки чоловічої статі, але вони не є всебічно корисними.
Олександр Причард

6
"якби вони були настільки ж корисними, як деякі з них здаються, я б не використовував Stack Exchange." Я згоден, і тому я намагаюся написати хороші відповіді. Цитування та цитування довідкових джерел - це не змусити кого-небудь почуватись німим або поганим за те, що він уже не читав з цього джерела, це робиться для надання додаткових доказів того, що в іншому випадку може бути доказовим твердженням, а також інформування користувача, де більше відповідна інформація може зберігатися. Ви хочете знати, що ви робите семантично правильну справу, а також знаючи, що це працює.
Аарон Холл

278

Коротка відповідь: Тип exit

Якщо це не працює, однак ...

Символ втечі SSH та послідовність відключення

Більшість реалізацій SSH реалізують символи евакуації для інтерактивних сесій, подібно до Ctrl-]комбінації telnet . За замовчуванням символ втечі SSH є ~, вводиться на початку рядка.

Якщо ви хочете припинити інтерактивний сеанс OpenSSH, який застряг і не може вийти з нього, ввівши exitабо CtrlDв оболонку на віддаленій стороні , ви можете ввести, ~а потім - крапка .. Щоб обов’язково ввести символ втечі на початку рядка введення, слід спочатку натиснути Enter. Отже наступна послідовність в більшості випадків припинить сеанс SSH:

Enter~.

Інші послідовності втечі

Наприклад, OpenSSH пропонує й інші послідовності втечі ~.. Увійшовши ~?під час сеансу, ви повинні дати вам список. Деякі приклади:

  • ~після цього Ctrl-Zприпиняє сеанс,
  • ~& ставить його прямо на другий план,
  • ~# дає список переадресованих з'єднань у цьому сеансі.
  • Якщо ви хочете , щоб просто ввести тильду на початку рядка, ви повинні подвоїти його: ~~.

Символ втечі можна змінити за допомогою параметра командного рядка -e. Якщо встановити спеціальне значення -e none, вимкнення відключено, а сеанс повністю прозорий.

Дивіться також відкриту сторінку OpenBSD на ssh (на яку посилається www.openssh.org ) під -eопцією командного рядка


2
Навіщо робити це просто, коли ти можеш це зробити безкорисно складним?
MariusMatutiae

7
@MariusMatutiae ОП попросив для випадку , коли не було віддаленої оболонки не вводити exitабо Ctrl-D, але тільки процес прослуховування. Я чітко заявив, що моє рішення підходить для сеансу, який затримується і не може бути закритий . Я намагався уточнити це більше, сподіваюсь, це легше зараз побачити.
Дубу

5
Я був скептично налаштований, але ~.без пробілів було саме те, що мені потрібно, дякую! :)
Джеймі

2
У швейцарській німецькій розкладці клавіатури тильда створюється натисканням клавіш AltGr + ^ (плюс це клавіша блокування). Через це здається, що послідовність втечі не працює. Хтось знає, як набрати втечу за замовчуванням у швейцарській німецькій мові?
Даніель Олдер

4
@Dobu Знайшов причину, чому вона раніше не працювала. Якщо ви вже ввели ~ в одному рядку (що легко трапляється, якщо ви тестуєте), наступне ~. послідовності ігноруються. Довелося спочатку натиснути повернення ...
Даніель Олдер

32

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

Ви можете вводити exitта натискати Enterабо використовувати Ctrl+D


1
"вихід" допоміг мені, оскільки ctrl + d не працював у глядачі VNC ... дякую
raj gupta

1
Це не спрацьовує у випадках, коли машина замерзла або зникла або програма не реагує на будь-які дані
Daniel Alder

11

Просто введіть exitабо logout(потім натисніть Enter звичайно) і те, і інше буде працювати.


4

Це підтримувані символи, які надають різні варіанти, з якими можна пограти з ssh.

Підтримувані послідовності втечі:

 ~.  - 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, натиснувши Enter.


3

Ви можете написати logoutв консольному рядку (і натисніть Enterзвичайно).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.