ในขณะที่คุณไม่สามารถกลับไปที่เซสชัน SSH ที่เสียหายได้คุณสามารถซ่อมแซมกระบวนการที่ทำงานอยู่ภายใน SSHซึ่งเทียบเท่ากับสิ่งที่คุณต้องการ
คำแนะนำ
ในกรณีของคุณคุณจะเข้าควบคุมapt-get
กระบวนการจากเซสชัน SSH เซสชันใหม่screen
หรือสิ่งที่คล้ายกัน สิ่งที่ฉันชอบมากที่สุดคือreptyr
คำสั่ง:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
จากนั้นด้วย pid ที่คุณพบสำหรับกระบวนการของคุณ:
$ sudo reptyr -T 10626
หรือหากวิธีนี้ใช้ไม่ได้ให้ลอง:
$ reptyr 10626
หลังจากขั้นตอนนี้คีย์บอร์ดของคุณจะเข้าสู่โปรแกรมที่คุณเข้าควบคุม น่าเสียดายที่คุณจะไม่เห็นผลลัพธ์เก่าของเซสชัน SSH เช่นapt-get
ผลลัพธ์ที่ขอให้คุณยืนยัน
คำอธิบาย
มีเครื่องมืออื่น ๆ อีกมากมายที่ทำงานเหมือนกับreptyr
(โดยผ่านการptrace
แนบดีบั๊ก) ดูคำถามและคำตอบต่อไปนี้ที่กล่าวถึง:
ในคำแนะนำข้างต้นการreptyr 10626
ใช้ptrace
debug Attachment ในขณะที่sudo reptyr -T 10626
คำสั่งใช้การขโมย TTY และเป็นที่นิยม ( รายละเอียด )
ท้ายที่สุดเหตุผลที่คุณไม่สามารถเข้าร่วมเซสชัน SSH ด้วยวิธีนี้ได้เนื่องจากsshd
กระบวนการไม่ได้ถูกควบคุมโดยโฮสต์เทอร์มินัลแทนจะให้ส่วนทาสของเทอร์มินัล - pts
อุปกรณ์ - ในขณะที่ส่วนหลักที่ควบคุมมันอยู่บน เครื่องไคลเอนต์ที่นี่พร้อมกับเซสชัน SSH ที่ใช้งานไม่ได้ในระหว่างนั้น เมื่อคุณบังคับให้ทำเช่นsshd
นี้ด้วยreptyr -s <pid>
คีย์บอร์ดของคุณจะเข้าสู่กระบวนการนั้นไม่ใช่กระบวนการลูกที่ทำงานอยู่ ดังนั้น "Ctrl + Z" ก็จะฆ่าsshd
มัน
apt-get
กระบวนการยังคงทำงานอยู่ มันควรจะตายไปพร้อม ๆ กับกระบวนการทั้งหมดจนถึง SSH ฉันสังเกตเห็นว่าdo-dist-upgrade
เริ่มโดยอัตโนมัติในscreen
/byobu
เซสชัน: ในบางสถานการณ์อาจapt-get
ทำเช่นเดียวกัน?