Mặc dù bạn không thể gắn lại vào phiên SSH bị hỏng, bạn có thể sửa chữa lại quá trình đang chạy bên trong SSH - tương đương về mặt chức năng với những gì bạn muốn.
Hướng dẫn
Trong trường hợp của bạn, bạn sẽ đảm nhận apt-getquá trình được kiểm soát từ phiên SSH mới , screenphiên hoặc tương tự. Yêu thích của tôi cho điều này là reptyrlệnh:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Sau đó, với pid bạn tìm thấy cho quá trình của bạn:
$ sudo reptyr -T 10626
Hoặc nếu điều đó không hiệu quả, hãy thử:
$ reptyr 10626
Sau giai đoạn này, tất cả đầu vào bàn phím của bạn sẽ chuyển sang chương trình bạn đã thực hiện. Thật không may, bạn sẽ không thấy đầu ra cũ của phiên SSH, chẳng hạn như apt-getđầu ra yêu cầu bạn xác nhận.
Giải thích
Có nhiều công cụ khác về cơ bản hoạt động giống như reptyr(nghĩa là, thông qua ptracetệp đính kèm gỡ lỗi). Xem các câu hỏi và câu trả lời sau đây khi chúng được thảo luận:
Trong các hướng dẫn ở trên, reptyr 10626sử dụng ptracetệp đính kèm gỡ lỗi trong khi sudo reptyr -T 10626lệnh sử dụng TTY ăn cắp và tốt hơn là ( chi tiết ).
Cuối cùng, lý do tại sao bạn không thể tiếp quản phiên SSH theo cách này là do sshdquá trình không được điều khiển bởi thiết bị đầu cuối máy chủ, thay vào đó, nó cung cấp phần phụ của thiết bị đầu cuối - một ptsthiết bị - trong khi phần chính điều khiển nó nằm trên máy khách, ở đây có phiên SSH bị hỏng ở giữa. Khi bạn buộc thực hiện sshdquy trình như vậy reptyr -s <pid>, đầu vào bàn phím của bạn sẽ chuyển sang quy trình đó, chứ không phải quy trình con đang hoạt động. Vì vậy, một "Ctrl + Z" sẽ đơn giản giết chết điều đó sshd.
apt-getquá trình vẫn đang chạy. Đáng lẽ nó đã chết cùng với toàn bộ chuỗi quy trình lên tới SSH. Tôi đã nhận thấy rằngdo-dist-upgradetự động bắt đầu trong mộtscreen/byobuphiên: có thể trong một số trường hợp,apt-getcó giống như vậy không?