ในขณะที่คุณไม่สามารถกลับไปที่เซสชัน 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ใช้ptracedebug 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ทำเช่นเดียวกัน?