Câu hỏi Làm cách nào để thoát khỏi kết nối SSH?


Tôi đang kết nối với máy chủ thông qua SSH để gửi thư tới máy chủ socket 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 đi, 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ế là xong.

Có một lệnh hoặc một tổ hợp phím cho phép tôi quay trở lại chế độ lệnh?


183
2017-08-28 14:29


gốc




Các câu trả lời:


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

Hai lối:

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

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

Chúng tôi 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

cho chúng ta tài liệu về SSH, trong đó có phần sau về 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.

63
2017-09-16 21:57



Tôi không tìm thấy phần "cách chúng ta 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ố loại giải pháp rõ ràng để tìm, khi tôi không tìm thấy nó đặc biệt trực quan mà tôi sẽ "người đàn ông ssh "để tìm cách ngắt kết nối. Làm thế nào tôi đã tìm thấy "lối ra", ví dụ? Tôi đồng ý rất tốt khi tái khẳng định việc kiểm tra các trang của người đàn ông 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 người đàn ông khó hiểu, hãy gửi một 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 cải thiện (không đủ tiêu chuẩn). - Aaron Hall
Điều đó nghe có vẻ tốt về lý thuyết, nhưng trong thực tế, nhiều người phải vật lộn để tìm ra cách điều hướng các lệnh này bởi vì thậm chí biết cách tìm kiếm thông tin mà bạn muốn giả định rằng 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 đi xa hơn nữa. Tôi không tranh luận rằng các trang của người đàn ông là hữu ích, nhưng nếu chúng hữu dụng như một số người làm cho chúng có vẻ, tôi sẽ không sử dụng Stack Exchange. Tôi muốn được rõ ràng Tôi nghĩ rằng câu trả lời của bạn là tốt, và rằng mọi người nên kiểm tra các trang người đàn ông, nhưng họ không phải là tất cả-bao gồm hữu ích. - Alexander Pritchard
"nếu chúng hoàn toàn hữu ích như một số làm cho chúng có vẻ, 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 những câu trả lời hay. Trích dẫn và trích dẫn nguồn tham khảo không làm cho bất kỳ ai cảm thấy câm hoặc xấu 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ì sẽ là một khẳng định có thể chứng minh được, cũng như thông báo cho người dùng biết 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ữ nghĩa điều chính xác, cũng như biết rằng nó hoạt động. - Aaron Hall


Câu trả lời ngắn: Loại exit

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

Ký tự thoát SSH 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ư telnet's Ctrl-] sự phối hợp. 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 exit hoặc là CtrlD vào một cái vỏ ở phía xa, bạn có thể nhập ~ theo sau là 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, trình tự sau sẽ trong hầu hết các trường hợp chấm dứt một phiên SSH:

Đi vào~.

Trình tự thoát khác

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

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

Nhân vậ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 được tắt và phiên hoàn toàn minh bạch.

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


254
2017-07-17 09:26



Tại sao làm cho nó đơn giản khi bạn có thể có nó vô dụng phức tạp? - MariusMatutiae
@MariusMatutiae OP hỏi một trường hợp không có vỏ từ xa để vào exit hoặc là Ctrl-D, nhưng chỉ 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 cho một phiên bị kẹt và không thể thoát. Tôi đã cố gắng để làm rõ điều này hơn, hy vọng nó dễ dàng hơn để xem bây giờ. - Dubu
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
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à khóa chặn). Bởi vì điều này, có vẻ như trình tự thoát không hoạt động. Có ai biết cách gõ lối thoát mặc định bằng tiếng Đức Thụy Sỹ không? - Daniel Alder
@Dobu Tìm ra 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 (dễ dàng xảy ra nếu bạn đang thử nghiệm), sau đây ~. các chuỗi được bỏ qua. Đã phải báo chí trở lại đầu tiên ... - Daniel Alder


Bạn có muốn thoát khỏi SSH shell không?

Bạn có thể gõ exit va đanh Đi vào, hoặc dùng Ctrl+D 


33
2017-08-28 18:37



"thoát" giúp tôi như ctrl + d không làm việc trong VNC viewer ... cảm ơn - raj gupta
Đ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 bất kỳ đầu vào nào - Daniel Alder


Chỉ loại exit hoặc là logout (sau đó nhấn Enter tất nhiên) cả hai sẽ làm việc.


11
2018-04-14 15:00





Bạn có thể viết logout trong dòng điều khiển (và nhấn Đi vào tất nhiên).


4
2017-07-17 07:12





Tôi thấy câu hỏi được trả lời đầy đủ, nhưng tôi muốn thêm rằng tôi thấy bạn đang kết nối với máy chủ này thông qua ssh trên cổng 5566. Tôi đọc một lần vào trang web này giao tiếp thông qua SSH trên các cổng không có đặc quyền (là mọi thứ trên 1023) là không an toàn.

Khi bạn đăng nhập vào hệ thống với tư cách người dùng không phải root (bất kỳ ai không phải là uid 0), bạn không thể tạo danh sách cổng TCP hoặc UDP dưới 1024. Điều này là do số cổng dưới 1024 được gọi là cổng đặc quyền và chỉ có thể là được mở bởi root hoặc các tiến trình đang chạy dưới dạng root. Vì vậy, ví dụ, khi máy chủ web của bạn (apache, nginx vv) sẽ bắt đầu, nó sẽ làm như vậy là người dùng root đặc quyền để mở một kết nối nghe đến cổng 80 (cổng theo mặc định sẽ được sử dụng cho lưu lượng HTTP). Bây giờ, ngay sau khi cổng được mở và mọi thứ cần được thực hiện khi root được thực hiện, máy chủ web sẽ quay trở lại thành người dùng không có đặc quyền (hoặc là www-data, apache hoặc không có người dùng nào). Từ thời điểm đó, khi một cái gì đó xấu đang xảy ra, nó chỉ giới hạn ở những quyền mà người dùng có. Bây giờ, trở lại SSH: khi chúng tôi bắt đầu SSH trên cổng 22, chúng tôi biết thực tế rằng điều này được thực hiện bằng root hoặc một quá trình root vì không có người dùng nào khác có thể mở cổng đó. Nhưng điều gì xảy ra khi chúng tôi chuyển SSH sang cổng 2222? Cổng này có thể được mở mà không có tài khoản đặc quyền, có nghĩa là tôi có thể viết một kịch bản lệnh đơn giản để nghe cổng 2222 và bắt chước SSH để nắm bắt mật khẩu của bạn. 

Vì vậy, khi tôi thay đổi cổng bản thân mình tôi luôn luôn sử dụng một cổng dưới 1024 mà chưa được sử dụng bởi các phần mềm tiêu chuẩn khác. Có một danh sách tốt trên Wikipedia cho điều này.

Tác giả của bài viết cũng tin rằng việc thay đổi cổng SSH không nên được thực hiện vì lý do tương thích.

Một vấn đề khác: nhiều tập đoàn có tường lửa đến và đi, nghĩa là bạn không thể truy cập bất kỳ trang web nào đến bất kỳ cổng ngẫu nhiên nào và mong đợi nó hoạt động. Một số cổng bảo mật, như cổng 22 thường được miễn trừ, trong khi các cổng khác như cổng 25 hoặc 110 bị chặn.

Cá nhân tôi nghĩ rằng có những trường hợp sử dụng mà nó có ích. Ví dụ, khi bạn hoặc một nhóm nhỏ người là người duy nhất kết nối với máy chủ thông qua SSH, bạn đăng nhập các cuộc tấn công bạo lực tự động và bạn muốn giữ sạch nhật ký.


4
2017-07-19 06:59



Chắc chắn ... Đó là rất nhiều văn bản mặc dù và tôi không muốn spam. :) Nhưng đối số của bạn là một đối số tốt. - Ogier Schelvis
Theo kinh nghiệm của tôi, những gì bạn viết ở đây là một phần đúng, nhưng vâng, mọi người nên xem xét sự thật này về các cổng dành riêng, dù sao thì đó không phải là vấn đề ở đây. Cảm ơn bạn cho câu trả lời của bạn, mặc dù! - Andreea
Nếu có một phần không đúng, tôi tò mò nó là gì. - Ogier Schelvis
Tôi sẽ chỉ cung cấp cho bạn cái đầu tiên: bạn không nên sử dụng cổng dưới 1024; danh sách các cổng được sử dụng bắt đầu từ số không. Nó được khuyến khích để sử dụng các cổng trên 63737. Nhưng bạn nên xem xét thực tế là nếu bạn chưa cài đặt trên máy chủ của mình, ví dụ, Polipo sử dụng cổng 8123, bạn có thể sử dụng nó cho đến khi được cài đặt polipo (và thì không ai nhớ thay đổi cổng: P) - Andreea
Đây là những gì có thể sai: Mối quan tâm được mô tả là ai đó đang thực hiện một cuộc tấn công địa phương. Hy vọng rằng quản trị viên đăng nhập vào các thiết bị cơ sở hạ tầng quan trọng được tin cậy. Có nhiều cổng hơn 1024 ở phía dưới. Vì vậy, ẩn một dịch vụ trên một cổng cao hơn có thể giúp ngăn chặn / trì hoãn được nhìn thấy bởi các máy quét cổng từ xa tập trung vào các cổng được sử dụng thường xuyên nhất. Nếu ai đó là cổng quét cổng cao hơn của bạn, một IDS có thể đặt ra một cảnh báo (và có thể triển khai các kỹ thuật IPS). Giới hạn ở <1024 hạn chế người bảo vệ của bạn (quản trị viên địa phương đáng tin cậy) và thu hẹp mọi thứ cho vectơ tấn công có khả năng và ít tin cậy hơn: điều khiển từ xa - TOOGAM


Đâ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.

Chuỗi 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ần thoát chỉ được nhận ra ngay sau một dòng mới.) Bạn có thể đóng danh sách Chuỗi thoát bằng cách nhấn Đi vào.


3
2018-06-14 22:26





Hệ điều hành Mac: khi ssh treo sử dụng trình tự sau:

ENTER 
SHIFT+`
.

Ở đâu: shift + `  sản xuất ~ (ký tự dấu ngã)


1
2018-03-29 17:25