ออกจากการเชื่อมต่อ SSH ทั้งหมดในหนึ่งคำสั่งและปิด PuTTY


19

มีวิธีในการสำรองการเชื่อมต่อ SSH ทั้งหมดและปิดPuTTYใน "one shot" หรือไม่ ฉันทำงานใน Windows 7 และใช้ PuTTY กับ SSH ไปยังโฮสต์ Linux ต่างๆ

ตัวอย่างของวิธีที่ฉันพบว่าตัวเองทำงาน:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

จากข้างบนวิธีใดที่จะได้รับจาก host8 ถึงปิด PuTTY ในนัดเดียว? บางครั้งฉันพบว่าตัวเองโฮสต์ได้มากถึง 5 หรือ 10 คน ฉันรู้ว่าฉันสามารถคลิก X เพื่อปิดหน้าต่าง PuTTY แต่ฉันต้องการตรวจสอบให้แน่ใจว่าการเชื่อมต่อ SSH ของฉันปิดอย่างถูกต้องโดยใช้คำสั่ง exit ฉันก็รู้ว่าฉันกำลังขอคำแนะนำเกี่ยวกับวิธีเพิ่มความขี้เกียจ ฉันจะเขียนมันออกเป็น "ฉันจะมีประสิทธิภาพมากขึ้นได้อย่างไร"


6
ไม่ใช่สิ่งที่คุณถามโดยตรง แต่จะกดctrl+dหลายครั้งได้อย่างไร
Ulrich Dangel

@UlrichDangel ฉันไม่เคยใช้มันมาก่อน แต่ก็เป็นวิธีที่รวดเร็วในการสำรองการเชื่อมต่ออย่างรวดเร็ว
Banjer

2
คุณทำรังรอบ ssh จริง ๆ 5 ถึง 10 ระดับลึกหรือไม่ คุณรู้หรือไม่ว่าการสร้างอุโมงค์ที่ซับซ้อนนั้นตีกลับแพ็กเก็ตทั้งหมดในเซสชัน ssh ของคุณผ่านโฮสต์เหล่านั้นทั้งหมดหรือไม่ คุณสามารถทำให้ปัญหาหายไปโดยเพียงแค่ไม่ทำรังรอบ ssh หรือไม่?
jw013

@ jw013 ไม่ฉันไม่ได้ตระหนักถึงสิ่งนั้น แต่เข้าท่า จริงๆแล้วระดับ 5-10 ก็เป็นการพูดเกินจริง แต่ฉันพยายามที่จะอธิบายคำถามของฉันว่า
Banjer

คำตอบ:


29

ลองใช้sshลำดับการยกเลิกการยกเลิกการเชื่อมต่อ

ในsshเซสชันป้อน~.(tilde dot) คุณจะไม่เห็นอักขระเมื่อคุณพิมพ์ แต่เซสชันจะสิ้นสุดทันที

$ ~.
$ Connection to me.myhost.com closed.  

จาก man 1 ssh

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 for SSH protocol
         version 2 and if the peer supports 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 remote port-forwardings using 
         -KR[bind_address:]port.  !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 for SSH protocol 
         version 2 and if the peer supports it).

สวยเท่ห์! มีวิธีใดบ้างที่จะใส่~.ในนามแฝงหรือฟังก์ชัน เพียงเพื่อให้จำชื่อexitallได้ง่าย ตอนนี้ฉันขอวิธีมากเกินไป :) ฉันพยายามเล็ก ๆ น้อย ๆ ในแต่ได้รับ~/.bashrc -bash: ~.: command not foundฉันคิดว่าทุบตีเห็นว่ามันเป็นสตริงและไม่ใช่ลำดับการหลบหนีที่มาจากแป้นพิมพ์โดยตรง
Banjer

ฉันชอบctrl+dวิธีแก้ปัญหาด้วยเช่นกัน แต่สิ่งนี้ตอบคำถามของฉันได้โดยตรงมากขึ้น ขอบคุณทุกคน
Banjer

3
@Banjer ทุบตีไม่เคยเห็น~.มันจัดการด้วยsshตัวเอง
Gilles 'หยุดความชั่วร้าย'

@Gilles gotcha ทำให้รู้สึก
Banjer

และไม่มีการรับประกันว่า PuTTY ก็ทำเช่นนี้ sshไคลเอนต์CLI ต้องการเทคนิคนี้เพราะเป็น CLI PuTTY เป็นแอปพลิเคชั่น GUI และมีวิธีที่ใช้งานง่ายมากในการทำสิ่งนี้บน GUI
Alexios

12

เพียงแค่กดCtrlDและมันจะนำคุณออกจากระบบเพื่อกดปุ่ม Ctrl ค้างไว้แล้วกด "d" จนกระทั่งหน้าต่างหายไป


1
น่าเศร้าที่นี่ไม่ได้ผลในระดับสากล เซสชั่นที่รันการทำงานเป็นบรรณาธิการหรือเครื่องมืออื่น ๆ EOTที่หน้าจอเต็มรูปแบบมีแนวโน้มที่จะไม่สนใจ และแม้กระทั่งbashจะเพิกเฉยตรงกลางบรรทัดคำสั่ง ลองด้วยตัวคุณเอง: Ctrl-Dพิมพ์ตัวอักษรเดียวและพยายาม
Alexios

Ctrl + D ทำอะไรฉันหมายถึงมีอยู่อย่างปลอดภัยหรือเพียงแค่ฆ่ากระบวนการ?
AMB

มันออกอย่างปลอดภัย มันเป็นช็อตคัทเชลล์ที่เหมือนกับพิมพ์ 'exit' และกด Enter
โจ

อันที่จริงการเหมืองแร่ (หน้าต่างคอมไพล์ทุบตีและอูบุนตูทุบตี) logoutปัญหา
velis

ใช่ฉันเชื่อว่า exit จะเรียกการออกจากระบบด้วยเนื่องจากการเชื่อมต่อ ssh มักจะไม่ใช่เซสชันการเข้าสู่ระบบ
Joe


2

อีกวิธีคือทำfunctionเพื่อssh:

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

น่าเสียดายที่มันจะปิดการเชื่อมต่อและออกจากคอนโซลตลอดเวลาหลังจากที่คุณทำงานบนระบบรีโมตเสร็จแล้ว

โปรดทราบว่าคุณต้องใช้ฟังก์ชั่นดังกล่าวกับเซิร์ฟเวอร์ของคุณไม่เช่นนั้นแฮ็คนี้จะไม่ทำงาน Btw คุณสามารถใส่ฟังก์ชันลงใน ~ / .bashrc หรือ ~ / .whething_shell_you_use_rc ได้เสมอ

ดูเหมือนแฮ็คที่สกปรกเล็กน้อยเมื่อเทียบกับวิธีของ uther


functionไม่ใช่ POSIX - เพียงลบคำหลักและคุณต้องอ้าง$@อย่างถูกต้องมิฉะนั้นอาร์กิวเมนต์ของคุณจะถูกส่งผ่านหลังจากแยกคำ (ไม่ดี)
Chris Down

2

หรือคุณสามารถใช้execเพื่อแทนที่กระบวนการเชลล์ด้วยsshเมื่อกระโดดไปที่โฮสต์อื่น:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

ความลึก 5 ระดับไม่สวยเนื่องจากการรับส่งข้อมูลจะผ่านเซิร์ฟเวอร์อื่น ๆ ทั้งหมด ด้วยเหตุนี้ฉันจึงไม่แนะนำเพียงแค่ฆ่า PuTTY หรือ ssh (~.) เนื่องจาก (ขึ้นอยู่กับสิ่งที่คุณทำ) สิ่งนี้อาจส่งผลให้เกิดกระบวนการที่ไม่ถูกต้องบนเซิร์ฟเวอร์

ดีกว่าที่จะลองและ "ขี้เกียจ" น้อยลง คลิกขวาบนแถบชื่อเรื่องของ puttys ทำให้การเปิดเซสชันใหม่รวดเร็ว หากคุณมีเซิร์ฟเวอร์ "ค่าเริ่มต้น" และยอมรับการข้าม 1 ครั้งคุณลักษณะ "การทำซ้ำเซสชัน" จะมีประโยชน์มาก โดยเฉพาะอย่างยิ่งเมื่อใช้การตรวจสอบ pubkey


2

หากคุณไม่สนใจที่จะทำสคริปท์เล็ก ๆ น้อย ๆ คุณสามารถทำได้

สคริปต์: myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

โทรผ่านคำสั่ง dot:

$ . myssh user@server.com

หากคุณต้องการออกจากระดับหนึ่ง:

$ exit

หากคุณต้องการออกทั้งหมด:

$ exit 5

แน่นอนคุณจะต้องคัดลอกไปยังคอมพิวเตอร์ทุกเครื่องที่คุณอาจเคยจาก นอกจากนี้การกำหนดฟังก์ชั่นเชลล์ที่เรียกว่า ssh จะง่ายกว่าไหม? นั่นจะหลีกเลี่ยงช่วงเวลาก่อนหน้าเป็นต้น
etherfish

-1

การพิมพ์ออกจากระบบในหน้าต่าง terminal โป๊วสำหรับฉัน:

richard@forevermore:~ > logout

ปิดการเชื่อมต่อ ssh และออกจาก Putty Application


ฉันเชื่อว่าคุณอ่านคำถามไม่ถูกต้อง OP ไม่ssh host1แล้วจากไม่host1 ssh host8เมื่อมาถึงจุดที่logoutจะทำในสิ่งเดียวกันเป็นexitคำสั่งที่พวกเขารู้อยู่แล้วว่า - ออกจากและทำให้พวกเขากลับเข้ามาในhost8 host1
G-Man กล่าวว่า 'Reinstate Monica'

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