ฉันจะออกจากการเชื่อมต่อ 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.

ฉันไม่พบส่วน "เราจะรู้ได้อย่างไร" โดยเฉพาะอย่างยิ่งมีประโยชน์เพราะสำหรับฉันแล้วมันก็หมายความว่ามีวิธีแก้ปัญหาที่เห็นได้ชัดบางอย่างเมื่อฉันไม่พบว่ามันเป็นสัญชาตญาณที่ฉันจะ "man ssh "เพื่อค้นหาวิธียกเลิกการเชื่อมต่อ ฉันจะพบ "ทางออก" เช่นได้อย่างไร ฉันเห็นด้วยที่จะยืนยันการตรวจสอบหน้าคนเมื่อคุณทำได้
Alexander Pritchard

@AlexanderPritchard ฉันได้อัปเดตคำตอบเพื่ออธิบายสิ่งที่เรากำลังทำที่นี่ให้ดียิ่งขึ้น หากคุณพบว่าหน้าคนเข้าใจยากให้ยื่นปัญหากับผู้ดูแลหรือดีกว่าให้ส่งคำขอการดึงที่มีการปรับปรุง (ดีอย่างไม่มีเงื่อนไข)
Aaron Hall

1
ฟังดูดีในทางทฤษฎี แต่ในทางปฏิบัติหลายคนพยายามคิดหาวิธีนำทางคำสั่งเหล่านี้เพราะแม้จะรู้วิธีการค้นหาข้อมูลที่คุณต้องการสมมติว่าคนบริบทไม่มี การยื่นปัญหากับผู้ดูแลและส่งคำขอแบบดึงพร้อมการปรับปรุงให้ดียิ่งกว่านั้นอีก ฉันไม่ได้โต้แย้งว่า man pages นั้นมีประโยชน์ แต่ถ้าพวกมันมีประโยชน์อย่างแน่นอนเหมือนกับที่บางคนทำให้พวกเขาดูเหมือนฉันจะไม่ใช้ Stack Exchange ฉันต้องการชัดเจนฉันคิดว่าคำตอบของคุณดีและผู้คนควรตรวจสอบหน้าคน แต่พวกเขาไม่ได้มีประโยชน์อย่างทั่วถึง
Alexander Pritchard

6
"หากพวกเขามีประโยชน์อย่างชัดเจนเหมือนกับที่บางคนทำให้พวกเขาดูเหมือนฉันจะไม่ใช้กองซ้อนแลกเปลี่ยน" ฉันเห็นด้วยและนั่นคือเหตุผลที่ฉันพยายามเขียนคำตอบที่ดี การอ้างอิงและการอ้างถึงแหล่งอ้างอิงไม่ได้ทำให้ใครรู้สึกงี่เง่าหรือไม่ดีเพราะไม่ได้อ่านจากแหล่งนั้นมันก็ทำเพื่อให้หลักฐานเพิ่มเติมสำหรับสิ่งที่จะเป็นการยืนยันความจริงที่พิสูจน์ได้แสดงให้เห็นถึงผู้ใช้ ข้อมูลที่เกี่ยวข้องอาจถูกเก็บไว้ คุณต้องการที่จะรู้ว่าคุณกำลังทำสิ่งที่ถูกต้องในเชิงความหมายเช่นเดียวกับที่รู้ว่ามันทำงาน
Aaron Hall

278

คำตอบสั้น ๆ : ประเภท exit

หากยังไม่ได้ผล ...

SSH Escape Character และตัดการเชื่อมต่อ Sequence

การใช้งาน SSH ส่วนใหญ่จะใช้อักขระเลี่ยงสำหรับเซสชันแบบโต้ตอบซึ่งคล้ายกับการCtrl-]รวมกันของ telnet อักขระเลี่ยง SSH เริ่มต้นคือ~ป้อนที่จุดเริ่มต้นของบรรทัด

หากคุณต้องการที่จะยุติเซสชั่น OpenSSH โต้ตอบซึ่งจะติดอยู่และไม่สามารถนำออกมาโดยการป้อนexitหรือCtrlDเข้าไปในเปลือกในด้านระยะไกลคุณสามารถป้อนตามด้วยจุด~ .เพื่อให้แน่ใจว่าได้ป้อนอักขระเลี่ยงที่จุดเริ่มต้นของบรรทัดอินพุตคุณควรกด Enter ก่อน ดังนั้นลำดับต่อไปนี้โดยส่วนใหญ่จะยุติเซสชัน SSH:

Enter~.

ลำดับการหลบหนีอื่น ๆ

OpenSSH ตัวอย่างเช่นมีลำดับหนีอื่น ๆ ~.นอกเหนือจาก การเข้าสู่~?ช่วงการประชุมควรให้รายการแก่คุณ ตัวอย่างบางส่วน:

  • ~ติดตามCtrl-Zระงับเซสชัน
  • ~& วางลงในพื้นหลังโดยตรง
  • ~# ให้รายการการเชื่อมต่อที่ถูกส่งต่อในเซสชันนี้
  • ~~หากคุณต้องการเพียงแค่ใส่ตัวหนอนที่จุดเริ่มต้นของเส้นที่คุณต้องไปคู่มัน

-eตัวหนีสามารถเปลี่ยนแปลงได้โดยใช้ตัวเลือกบรรทัดคำสั่ง หากคุณตั้งค่าพิเศษการ-e noneหลบหนีจะถูกปิดใช้งานและเซสชันนั้นโปร่งใสอย่างสมบูรณ์

ดูเพิ่มเติมที่หน้า man ของ OpenBSD บน ssh (ซึ่งอ้างอิงจากwww.openssh.org ) ภายใต้-eตัวเลือกบรรทัดคำสั่ง


2
ทำไมต้องทำให้มันง่ายเมื่อคุณสามารถทำให้มันซับซ้อนอย่างไร้ประโยชน์?
MariusMatutiae

7
@MariusMatutiae OP ขอให้กรณีที่ไม่มีเปลือกระยะไกลที่จะเข้าexitหรือCtrl-Dแต่เป็นเพียงกระบวนการฟัง ฉันระบุชัดเจนว่าโซลูชันของฉันเหมาะสำหรับเซสชันที่ค้างและไม่สามารถออกได้ ฉันพยายามอธิบายเพิ่มเติมนี้หวังว่าจะเห็นได้ง่ายขึ้นในตอนนี้
Dubu

5
ฉันสงสัย แต่~.ไม่มีช่องว่างเป็นสิ่งที่ฉันต้องการขอบคุณ! :)
Jamey

2
ในรูปแบบแป้นพิมพ์ภาษาสวิสเยอรมันเครื่องหมายตัวหนอนจะถูกสร้างขึ้นโดยการกด AltGr + ^ (รวมทั้งเป็นปุ่มปิดกั้น) ด้วยเหตุนี้ดูเหมือนว่าลำดับการหลบหนีจะไม่ทำงาน ไม่มีใครรู้วิธีการพิมพ์การหลบหนีเริ่มต้นในสวิสเยอรมัน?
Daniel Alder

4
@Dobu พบเหตุผลว่าทำไมมันไม่ทำงานมาก่อน หากคุณพิมพ์ ~ ในบรรทัดเดียวกัน (ซึ่งเกิดขึ้นได้ง่ายหากคุณกำลังทดสอบ) ให้ทำดังนี้ ~ ลำดับจะถูกละเว้น ต้องกดย้อนกลับก่อน ...
Daniel Alder

32

คุณต้องการออกจากเชลล์ SSH หรือไม่

คุณสามารถพิมพ์exitและกดEnterหรือใช้Ctrl+D


1
"exit" ช่วยฉันด้วย 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

(โปรดสังเกตว่าหนีได้รับการยอมรับเพียงทันทีหลังจากการขึ้นบรรทัดใหม่.) Enterคุณสามารถปิดรายชื่อลำดับหนีโดยการกดปุ่ม



1

MacOS : เมื่อ ssh แฮงค์ใช้ลำดับต่อไปนี้:

ENTER 
SHIFT+`
.

โดยที่: shift + ` ก่อให้เกิด~ (อักขระตัวหนอน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.