Tôi có thể làm gì khi phiên SSH của tôi bị kẹt?


109

Đôi khi phiên ssh của tôi trong thiết bị đầu cuối bị treo. Làm thế nào tôi có thể thoát phiên ssh và kết nối lại?

Câu trả lời:


196

Nhập ~.(tức là dấu ngã, dấu chấm) ở đầu một dòng. Nói cách khác, nhấn Enter, sau đó ~, sau đó .. (Trong một số ngôn ngữ, bạn có thể cần nhấn Shifthoặc Altnhập ~ký tự.)

Nói chung, ~ký tự là một ký tự thoát trong phiên SSH khi bạn nhập nó ở đầu dòng. Nhập Entersau đó ~?để xem danh sách các lệnh thoát. Những cái phổ biến nhất là

  • ~. chấm dứt kết nối
  • ~^Z(nhấn ~then Ctrl+ Z) để tạm dừng kết nối và nhập lệnh cục bộ (chạy lệnh fgđể quay lại phiên SSH)

Nếu bạn muốn một dấu ngã ở đầu dòng, bấm ~hai lần.


7

Tất cả những gì bạn cần làm để thoát một phiên ssh là gõ exitvào dấu nhắc.

Hãy thử nhập Shift+ `+.


2
Nó không chấp nhận đầu vào của người dùng nữa, nó thực sự bị đình trệ. Trên Ubuntu có một tổ hợp bàn phím chấm dứt phiên mà bạn có thể sử dụng trong những trường hợp như thế này. Sau một thời gian phiên sẽ chấm dứt nêu rõ broken-pipenhưng tôi không chờ đợi.
Kit Sunde

1
@Kit tôi đã sửa câu trả lời của tôi. Xin lỗi vì điều đó. Tôi không nhận ra bạn có nghĩa là một phiên SSH hoàn toàn bị đình trệ.
daviesgeek

Tôi thường chỉ chờ nó hết thời gian. Mặc dù thực tế là tôi biết về các lệnh này, tôi luôn quên rằng tôi có thể sử dụng chúng để đẩy nhanh quá trình lấy lại vỏ của mình. Lưu ý @Gilles cũng trả lời, bạn có thể phải nhấn Enter / Return một lần trước khi ~. bạn có thể tìm hiểu thêm trong trang man SSH (một nửa trong nửa chừng) và bằng cách nhập: ~?vào phiên SSH hoạt động / được kết nối, một lần nữa, bạn có thể có nhấn enter một lần trước.
Jason Salaz

7

Nếu phiên của bạn bị treo và lời nhắc không còn phản hồi nữa, bạn chỉ có thể giết phiên bản Terminal và tất cả các quy trình con được liên kết với phiên bản đó, trong đó phiên ssh của bạn là một, nên được xử lý theo.

Nếu bạn thực sự muốn kỹ lưỡng mặc dù bạn có thể mở một phiên bản Terminal mới, hãy tìm các phiên ssh trong danh sách quy trình và tiêu diệt chúng thông qua dòng lệnh:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair someuser@someinstance.amazonaws.com

> kill 57139

Nếu không được, hãy thử:

> kill -9 57139

Đừng giết ssh-agentquá trình.

Hoặc bạn có thể mở Activity Monitor và tìm kiếm ở đó các phiên và nhấn nút kill cho chúng:

Lọc theo dõi hoạt động cho các phiên ssh


+1, đây là những gì tôi làm. Thường thì khi tôi để một phiên chạy, và sau đó kết nối bị ngắt hoặc tôi ngủ laptop, nó khiến ssh bị đóng băng. Tôi mở một tab bàn điều khiển mới và tiêu diệt PID của quá trình ssh (hoặc đóng tab ssh và mở một tab mới)
tạm dừng

Việc sử dụng phím tắt có hoạt động trên máy Mac của bạn mà không làm hỏng quá trình không?
Rafael Bugajewski

1
Sử dụng ~.. Xem ở trên.
Snowcrash

0

~. hoạt động, mặc dù có vẻ như bị kẹt hoàn toàn, dừng kết nối ssh và bạn có thể khởi động lại, nhưng trong bàn phím của tôi, tôi phải nhấn Alt + ~ sau đó khoảng trắng và sau đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.