Làm cách nào để thoát kết nối SSH?


245

Tôi đang kết nối với máy chủ qua SSH để gửi tin nhắn đến máy chủ ổ cắm bằng lệnh như:

ssh 181.169.1.2 -p 5566

Sau khi kết nối được thiết lập và tôi viết tin nhắn và gửi nó, tôi không thể thoát khỏi chế độ văn bản. Tôi chỉ được phép nhập thêm văn bản và thế thôi.

Có một lệnh hoặc một tổ hợp phím nào cho phép tôi quay lại chế độ lệnh không?

Câu trả lời:


156

Làm cách nào để thoát kết nối SSH?

Hai lối:

  • đóng phiên shell, ví dụ như exittheo sau Enter, hoặc Ctrl- dthường cho phép bạn thoát sshphiên bình thường,
  • trong trường hợp bạn có kết nối kém và trình bao không phản hồi, hãy nhấn Enterphím, sau đó nhập ~.và ssh sẽ ngay lập tức đóng lại và đưa bạn trở lại dấu nhắc lệnh của bạn.

Tùy chọn đầu tiên phải trực quan, nhưng làm thế nào để chúng ta biết tùy chọn sau?

Chúng ta có thể tìm hiểu thông tin này từ việc đọc cẩn thận trang người đàn ông.

$ man ssh

cung cấp cho chúng tôi tài liệu SSH , có phần sau về các ký tự thoát:

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.

Tôi không tìm thấy phần "làm thế nào để chúng tôi biết điều này" đặc biệt hữu ích, bởi vì với tôi nó ngụ ý rằng có một số giải pháp rõ ràng để tìm, khi tôi không thấy nó đặc biệt trực quan mà tôi sẽ "đàn ông ssh "Để tìm cách ngắt kết nối. Làm thế nào tôi có thể tìm thấy "lối ra", ví dụ? Tôi đồng ý rằng thật tốt khi xác nhận lại việc kiểm tra các trang man khi bạn có thể.
Alexander Pritchard

@AlexanderPritchard Tôi đã cập nhật câu trả lời của mình để giải thích kỹ hơn những gì chúng tôi đang làm ở đây. Nếu bạn thấy trang hướng dẫn khó hiểu, hãy gửi vấn đề với người bảo trì hoặc thậm chí tốt hơn, hãy gửi yêu cầu kéo với một cải tiến (không đủ tiêu chuẩn).
Aaron Hall

1
Về mặt lý thuyết nghe có vẻ tốt, nhưng trong thực tế, nhiều người đấu tranh để tìm ra cách điều hướng các lệnh này bởi vì ngay cả khi biết cách tìm kiếm thông tin bạn muốn giả định bối cảnh mọi người không có. Nộp một vấn đề với người bảo trì và gửi yêu cầu kéo với những cải tiến thậm chí còn vượt xa hơn thế này. Tôi không cho rằng các trang man là hữu ích, nhưng nếu chúng chắc chắn hữu ích như một số trang có vẻ như vậy, tôi sẽ không sử dụng Stack Exchange. Tôi muốn rõ ràng Tôi nghĩ rằng câu trả lời của bạn là tốt, và mọi người nên kiểm tra các trang nam, nhưng chúng không hữu ích cho tất cả.
Alexander Pritchard

6
"nếu chúng hoàn toàn hữu dụng như một số thứ có vẻ như chúng, tôi sẽ không sử dụng Stack Exchange." Tôi đồng ý, và đó là lý do tại sao tôi cố gắng viết câu trả lời tốt. Việc trích dẫn và trích dẫn các nguồn tham khảo không phải là để làm cho bất kỳ ai cảm thấy ngớ ngẩn hoặc tồi tệ vì chưa đọc từ nguồn đó, nó được thực hiện để cung cấp thêm bằng chứng cho những gì có thể là một sự khẳng định có thể sai lệch về sự thật, cũng như thông báo cho người dùng ở đâu thông tin liên quan có thể được lưu trữ. Bạn muốn biết rằng bạn đang làm đúng về mặt ngữ nghĩa, cũng như biết rằng nó hoạt động.
Aaron Hall

278

Câu trả lời ngắn: Gõ exit

Nếu điều đó không hiệu quả, tuy nhiên ...

Nhân vật SSH Escape và Trình tự ngắt kết nối

Hầu hết các triển khai SSH thực hiện một ký tự thoát cho các phiên tương tác, tương tự như Ctrl-]kết hợp của telnet . Ký tự thoát SSH mặc định là ~, được nhập ở đầu dòng.

Nếu bạn muốn chấm dứt một phiên OpenSSH tương tác bị kẹt và không thể thoát được bằng cách nhập exithoặc CtrlDvào một vỏ ở phía xa , bạn có thể nhập ~theo sau bởi một dấu chấm .. Để chắc chắn nhập ký tự thoát ở đầu dòng đầu vào, bạn nên nhấn Enter trước. Vì vậy, hầu hết các trường hợp sau đây sẽ chấm dứt phiên SSH:

Enter~.

Trình tự thoát khác

OpenSSH, ví dụ, cung cấp các chuỗi thoát khác bên cạnh ~.. Nhập ~?trong một phiên sẽ cung cấp cho bạn một danh sách. Vài ví dụ:

  • ~theo sau Ctrl-Zđình chỉ phiên,
  • ~& đặt nó trực tiếp vào nền,
  • ~# đưa ra một danh sách các kết nối chuyển tiếp trong phiên này.
  • Nếu bạn chỉ muốn nhập một dấu ngã ở đầu dòng, bạn phải nhân đôi nó : ~~.

Ký tự thoát có thể được thay đổi bằng cách sử dụng tùy chọn dòng lệnh -e. Nếu bạn đặt giá trị đặc biệt -e none, thoát sẽ bị vô hiệu hóa và phiên hoàn toàn minh bạch.

Xem thêm trang man OpenBSD trên ssh (được tham chiếu từ www.openssh.org ) trong -etùy chọn dòng lệnh


2
Tại sao làm cho nó đơn giản khi bạn có thể có nó phức tạp vô dụng?
MariusMatutiae

7
@MariusMatutiae OP đã yêu cầu một trường hợp không có vỏ từ xa để nhập exithoặc Ctrl-Dchỉ là một quá trình lắng nghe. Tôi đã tuyên bố rõ ràng rằng giải pháp của tôi phù hợp với phiên bị kẹt và không thể thoát được . Tôi đã cố gắng làm rõ điều này hơn, hy vọng bây giờ dễ nhìn hơn.
Dubu

5
Tôi đã hoài nghi, nhưng ~.không có không gian chính xác là những gì tôi cần, cảm ơn! :)
Jamey

2
Trong bố cục bàn phím tiếng Đức, dấu ngã được tạo bằng cách nhấn AltGr + ^ (cộng với đó là phím chặn). Bởi vì điều này, có vẻ như chuỗi thoát không hoạt động. Có ai biết làm thế nào để gõ thoát mặc định trong tiếng Đức swiss?
Daniel Alder

4
@Dobu Tìm thấy lý do tại sao nó không hoạt động trước đây. Nếu bạn đã gõ ~ trong cùng một dòng (điều này dễ xảy ra nếu bạn đang kiểm tra), thì sau đây ~. trình tự được bỏ qua. Phải nhấn trở lại trước ...
Daniel Alder

32

Bạn có muốn thoát khỏi vỏ SSH?

Bạn có thể nhập exitvà nhấn Enterhoặc sử dụng Ctrl+D


1
"Thoát" đã giúp tôi vì ctrl + d không hoạt động trong trình xem VNC ... cảm ơn
raj gupta

1
Điều này không hoạt động trong trường hợp máy bị đóng băng hoặc biến mất hoặc ứng dụng không phản hồi với bất kỳ đầu vào nào
Daniel Alder

11

Chỉ cần gõ exithoặc logout(sau đó nhấn Enter tất nhiên) cả hai sẽ hoạt động.


4

Đây là những nhân vật được hỗ trợ cung cấp các tùy chọn khác nhau mà bạn có thể chơi xung quanh với ssh.

Trình tự thoát được hỗ trợ:

 ~.  - 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

(Lưu ý rằng các lối thoát chỉ được nhận ra ngay sau một dòng mới.) Bạn có thể đóng danh sách các chuỗi Thoát bằng cách nhấn Enter.


3

Bạn có thể viết logouttrong dòng giao diện điều khiển (và Entertất nhiên nhấn ).


1

MacOS : khi ssh bị treo sử dụng trình tự sau:

ENTER 
SHIFT+`
.

trong đó: shift + ` tạo ra ~ (ký tự dấu ngã)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.