Contents

วิธีออกจากเซสชัน SSH ที่ไม่ตอบสนองบน Linux

คุณอาจกำลังพิมพ์เซสชัน SSH ระยะไกล แต่จู่ๆ ก็ไม่มีอะไรเกิดขึ้น ดูเหมือนว่าระบบจะไม่ตอบสนองต่อการกดแป้นพิมพ์ของคุณ คุณทำงานอะไร?

การเกิดขึ้นของเซสชัน SSH ที่หยุดทำงานหรือไม่ตอบสนองอาจเกิดจากปัจจัยต่างๆ เช่น การหยุดชะงักของเครือข่าย เซิร์ฟเวอร์โอเวอร์โหลด หรือซอฟต์แวร์ทำงานผิดปกติ หากต้องการยุติเซสชันที่ไม่ตอบสนอง อาจพยายามหลายวิธีรวมถึงการบังคับยุติการเชื่อมต่อโดยใช้คำสั่ง “kill” ในหน้าต่างเทอร์มินัลหรือโดยการปิดการเชื่อมต่อที่เกี่ยวข้องทั้งหมดผ่านแอปพลิเคชันที่เริ่มต้นเซสชัน SSH ในบางกรณี การเปลี่ยนไปใช้โปรโตคอลทางเลือก เช่น Mosh ซึ่งให้ประสิทธิภาพที่เพิ่มขึ้นด้วยอุโมงค์แบบถาวรและการรวมเชลล์ในตัว อาจให้โซลูชันที่มีประสิทธิภาพมากกว่า

อะไรทำให้เซสชัน SSH หยุดทำงาน

สาเหตุหลักประการหนึ่งที่ทำให้เซสชัน SSH ไม่ตอบสนองนั้นเกิดจากการขาดการเชื่อมต่อเครือข่ายอันเป็นผลมาจากสัญญาณ Wi-Fi ที่อ่อนลง หรือการระงับอุปกรณ์ระยะไกลโดยไม่ได้ตั้งใจ เหตุการณ์ดังกล่าวเกิดขึ้นบ่อยเป็นพิเศษในหมู่ผู้ใช้ที่ใช้คอมพิวเตอร์พกพา เนื่องจากอาจละเลยที่จะพิจารณาเซสชันที่กำลังดำเนินอยู่เมื่อปิดฝาแล็ปท็อปหรือไม่สามารถรักษาการเชื่อมต่ออินเทอร์เน็ตที่เสถียรได้

SSH ซึ่งย่อมาจาก Secure Shell ถือกำเนิดขึ้นในช่วงเวลาที่บุคคลทั่วไปไม่ได้ใช้คอมพิวเตอร์แล็ปท็อปเป็นวิธีหลักในการเข้าถึงทรัพยากรเครือข่าย การออกแบบและฟังก์ชันการทำงานของ SSH ได้รับการปรับแต่งเพื่อให้ทำงานได้อย่างเหมาะสมภายในการตั้งค่าที่มีการเชื่อมต่อผ่านสายเคเบิลจริง แทนที่จะส่งสัญญาณไร้สาย ด้วยเหตุนี้ โดยทั่วไปถือว่ามีประสิทธิภาพมากกว่าเมื่อใช้งานร่วมกับเครือข่ายแบบมีสายเมื่อเปรียบเทียบกับเครือข่ายไร้สาย

ยุติด้วยลำดับการหลบหนี

/th/images/ssh-escape-quit.jpg

หากการเชื่อมต่อ Secure Shell (SSH) ของคุณไม่ตอบสนองหรือค้าง แนวทางปฏิบัติที่เหมาะสมคือการใช้ Escape Sequence การดำเนินการที่ดำเนินการผ่านลำดับ Escape ช่วยให้สามารถสื่อสารกับไคลเอ็นต์ SSH แทนที่จะเป็นอุปกรณ์โฮสต์ที่อยู่ห่างไกล อักขระหลีกเริ่มต้นบนไคลเอนต์ OpenSSH ต้องใช้สัญลักษณ์ตัวหนอน (~) ซึ่งอยู่หน้าลำดับหลีกที่กำหนด

หากต้องการออกจากไคลเอ็นต์ Secure Shell (SSH) ผู้ใช้อาจใช้สัญลักษณ์ตัวหนอนตามด้วยจุด (จุด) ซึ่งโดยทั่วไปจะอยู่บนแถวแป้นพิมพ์เดียวกันกับสัญลักษณ์ตัวหนอน

อีกทางหนึ่งอาจเลือกที่จะแก้ไขอักขระหลีกได้ตามความต้องการ ในการทำเช่นนั้น เพียงใช้ตัวเลือก “-e” เมื่อดำเนินการคำสั่ง หรืออีกทางหนึ่ง การเปลี่ยนแปลงนี้สามารถทำได้อย่างถาวรโดยการปรับพารามิเตอร์ “EscapeChar” ภายในไฟล์ “.ssh/config” ที่อยู่ในโฮมไดเร็กตอรี่ของผู้ใช้บนระบบโฮสต์

การใช้คำสั่งฆ่า

/th/images/ps-grep-ssh.jpg

หากการใช้ลำดับหลีกไม่สำเร็จ ผู้ใช้อาจพยายามยุติไคลเอ็นต์ SSH โดยระบุตัวระบุกระบวนการ (PID) ซึ่งสามารถทำได้โดยการไพพ์เอาต์พุตของคำสั่ง “ps” ผ่านการค้นหาด้วย “grep”:

 ps aux | grep ssh 

พารามิเตอร์ “aux” ในคำสั่งสำหรับแสดงกระบวนการ (“ps”) บ่งบอกว่ากระบวนการทั้งหมดที่ทำงานบนระบบควรถูกแสดงรายการ โดยไม่คำนึงถึงเจ้าของหรือว่ามีเทอร์มินัลที่เกี่ยวข้องหรือไม่

เมื่อจัดการอินสแตนซ์หลายอินสแตนซ์ของการเชื่อมต่อ Secure Shell (SSH) การระบุเซสชันที่ใช้งานอยู่อาจเป็นเรื่องยากเนื่องจากขาดตัวบ่งชี้ที่มองเห็นได้ อย่างไรก็ตาม ด้วยการตรวจสอบไฟล์บันทึกซึ่งแสดงข้อมูล เช่น ชื่อผู้ใช้และที่อยู่ IP ที่เกี่ยวข้องกับแต่ละเซสชัน ทำให้สามารถระบุตำแหน่งอินสแตนซ์ที่กำลังทำงานอยู่ในปัจจุบันได้ หากต้องการยกเลิกการเชื่อมต่อเซสชันที่ไม่ได้ใช้งาน เพียงดำเนินการคำสั่ง “kill” ตามด้วย Process ID (PID) ของการยุติที่ต้องการ

 kill [PID] 

เพื่อการเชื่อมต่อ SSH ที่ดีขึ้น ให้ใช้ Mosh!

/th/images/mosh-ssh-vim.jpg

วิธีที่ดีกว่าในการหลีกเลี่ยงเซสชัน SSH ที่ถูกแช่แข็งที่น่ารำคาญคือการใช้ Mosh หากการเชื่อมต่อหลุด Mosh จะให้คุณเชื่อมต่อต่อไป มันจะส่งข้อความใด ๆ เมื่อคุณเชื่อมต่อใหม่ นอกจากนี้ยังใช้งานได้เมื่อคุณให้เครื่องเข้าสู่โหมดสลีป

เมื่อใช้เทอร์มินัลมัลติเพล็กเซอร์ เช่น GNU Screen หรือ tmux คุณจะสามารถรักษาและดำเนินการเซสชัน SSH ของคุณต่อได้ในกรณีที่เกิดการหยุดชะงัก ทำให้มีการเชื่อมต่อที่ราบรื่น อย่างไรก็ตาม เมื่อรวมกับ Mosh ความสามารถของพวกเขาก็ได้รับการปรับปรุงให้ดียิ่งขึ้น ส่งผลให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด

วิธีติดตั้ง Mosh บน Debian และ Ubuntu:

 sudo apt install mosh 

และบน Arch Linux:

 sudo pacman -S mosh 

ในตระกูล Distros ของ Red Hat:

 sudo dnf install mosh 

ตอนนี้คุณสามารถกำจัดเซสชัน SSH ที่ติดอยู่ได้แล้ว

Mosh มอบโซลูชันที่มีประสิทธิภาพมากขึ้นสำหรับการรักษาเซสชัน SSH ที่ใช้งานอยู่ เมื่อเปรียบเทียบกับวิธีการดั้งเดิม เช่น การใช้ Escape Sequence หรือใช้คำสั่ง “kill” เครื่องมือนี้นำเสนอการเชื่อมต่ออย่างต่อเนื่องแม้จะมีการหยุดชะงัก เช่น การเชื่อมต่อหลุดหรือไม่มีการใช้งานเป็นระยะเวลาหนึ่ง จึงขจัดความจำเป็นในกระบวนการตรวจสอบสิทธิ์ซ้ำซ้ำซึ่งมักเกี่ยวข้องกับเซสชัน SSH ที่ไม่ตอบสนอง