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-get
quá trình được kiểm soát từ phiên SSH mới , screen
phiên hoặc tương tự. Yêu thích của tôi cho điều này là reptyr
lệ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 ptrace
tệ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 10626
sử dụng ptrace
tệp đính kèm gỡ lỗi trong khi sudo reptyr -T 10626
lệ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 sshd
quá 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 pts
thiế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 sshd
quy 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-get
quá 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-upgrade
tự động bắt đầu trong mộtscreen
/byobu
phiên: có thể trong một số trường hợp,apt-get
có giống như vậy không?