Làm thế nào tôi có thể thoát ra khỏi ssh khi nó khóa?


380

Tôi thường xuyên ssh vào hộp của tôi ở nhà từ trường học, nhưng thông thường khi tôi thay đổi lớp học và máy tính của tôi bị đình chỉ, đường ống sẽ bị hỏng. Tuy nhiên, ssh chỉ đơn giản là khóa lên - Ctrl+ c, Ctrl+ zCtrl+ dkhông có hiệu lực.

Thật khó chịu khi phải khởi động lại thiết bị đầu cuối của tôi, và thậm chí còn khó chịu hơn khi phải đóng và tạo lại một cửa sổ màn hình mới.

Vì vậy, câu hỏi của tôi, có một cách dễ dàng để làm cho ssh chết đúng cách (tức là khi đường ống không "bình thường", nó sẽ thoát ra với một thông báo về một đường ống bị hỏng)? Hay tôi phải tìm ra PID là gì và tự giết nó?


Nếu tôi bị ngắt kết nối với phiên SSH hoạt động, nó sẽ đóng băng. Tôi chỉ cần giết nó và bắt đầu một phiên mới. Không có thông tin bị mất vì tôi sử dụng màn hình GNU.
Lekensteyn

Tôi cũng vậy - màn hình là tốt nhất. Nhưng vẫn còn khó chịu khi phải screen -x: P
Wayne Werner

[mosh] (mosh.mit.edu) là một giải pháp thay thế gọn gàng để tránh vấn đề này. Nó "vẫn kết nối" ngay cả với kết nối internet không liên tục.
jaynp

@jaynp Hạn chế của tôi khi sử dụng mosh (từ hai phút trước) là tôi không biết cách ngắt kết nối nó. Tôi đang sử dụng phiên tmux + irssi trên máy chủ từ xa (với tư cách là người phát thanh IRC, loại) và đôi khi tôi muốn ngắt kết nối (trong khi vẫn chạy tmux + irssi) và tôi đã làm với <enter> + ~ +. sử dụng SSH nhưng sẽ không hoạt động bằng mosh.
Pavel imerda

Câu trả lời:


534

Các khóa thông thường được chuyển tiếp qua sshphiên, vì vậy không có khóa nào hoạt động. Thay vào đó, sử dụng các chuỗi thoát. Để giết phiên hiện tại Enter ↵, sau đó ~, ..

Nhiều các trình tự thoát có thể được liệt kê với Enter ↵, ~, ?:

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Bạn có thể đóng danh sách các chuỗi Escape bằng cách nhấn enter.

Lưu ý rằng vì nhấn ~~nguyên nhân sshđể gửi ~thay vì chặn nó, bạn có thể giải quyết Nssh kết nối lồng nhau bằng cách nhấn ~ N lần. (Điều này chỉ áp dụng cho ~s trực tiếp theo một enter.) Điều đó có nghĩa là enter~~~~~.chấm dứt một sshphiên 5 lớp sâu và giữ nguyên 4 lớp còn lại.


48
Đối với bố trí bàn phím mà ~là một chìa khóa chết , trình tự quan trọng là Enter ~ Space ..
Søren Løvborg

1
Tôi đã thêm nhiều trình tự thoát có thể hữu ích. :)
gertvdijk

5
Lưu ý rằng bạn cần phải bỏ ghi chú dòng EscapeChar ~trong /etc/ssh/ssh_config(hoặc ~/.ssh/ssh_confignếu bạn thích).
MP Aditya

6
@Hitechcomputergeek Enter ~ ~ .Kể từ khi ~ ~gửi một nghĩa đen ~thông qua phiên SSH của bạn, phiên SSH thứ hai sẽ nhận được nó dưới dạng một dấu ngã đơn và sẽ diễn giải .như một phần của lối thoát. Để gửi đến phiên ssh lồng thứ 5, chỉ cần sử dụng 5 dấu ngã trong chuỗi thoát của bạn.
Điểm_Under

4
thay đổi cuộc sống;)
artm

54

Bạn cũng có thể muốn thiết lập các lưu giữ cấp độ ứng dụng cho SSH để ngăn chặn nó đóng băng về các vấn đề kết nối. Của tôi ~/.ssh/configchứa điều này:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Điều này làm cho ứng dụng khách ssh gửi lưu giữ cấp độ ứng dụng cứ sau 15 giây. Bất cứ khi nào ba trong số chúng thất bại liên tiếp (mặc định ServerAliveCountMax), khách hàng coi kết nối là treo và đóng nó.

Đối lập với tùy chọn khác TCPKeepAlive, điều này được kiểm tra trong kênh được mã hóa và không thể giả mạo.


Điều lưu ý là những người giữ bí mật đó cũng giúp, uhm, giữ cho các kết nối không hoạt động lâu dài , tức là ngăn bạn không có các phiên tcp nửa kín treo trong nhiều giờ.

Tôi đặc biệt khuyên bạn nên bật tính năng này nếu bạn gặp phải vấn đề này thường xuyên, nhưng bạn cũng nên biết về rủi ro bảo mật nhỏ mà nó có thể gây ra. Một cuộc tấn công bằng văn bản đã biết có thể trở nên dễ dàng hơn nếu kẻ tấn công biết khoảng thời gian và nội dung của một kết nối nhàn rỗi. Đây có thể là lý do tại sao nó không được bật theo mặc định.


3
Lý do an ninh. Bạn có thể đi uống và để ssh sessio mở và đối tác trong phòng thí nghiệm của bạn, người mà bạn đã làm việc trong 20 năm qua có thể sử dụng phiên của bạn để chiếm quyền điều khiển máy chủ và phá hủy nó ... trong khi bạn đang uống trong 10 phút nghỉ ngơi.
Luis Alvarado

2
@CYREX, hả? Và làm thế nào có thể tắt tùy chọn mặc định ngăn bạn có các đối tác phòng thí nghiệm không công bằng? %)
ulidtko

1
@ulidtko: Có lý do nào để không cài đặt ServerAliveIntervalthành 1 để phát hiện mất kết nối bị mất ngay lập tức không?
krlmlr

2
@gertvdijk: Cảm ơn bạn. Đối với tôi, nó hoạt động ngay cả khi không có Hostdòng. Ngoài ra, "Các thuật toán mã hóa hiện đại như Tiêu chuẩn mã hóa nâng cao hiện không dễ bị tấn công bằng văn bản đã biết." (từ liên kết bạn đã thêm) ...
krlmlr

2
bạn cũng có thể thay thế SSH bằng Mosh (vỏ di động). Mosh kết nối với máy chủ thông qua SSH, nhưng sau đó thiết lập kênh dựa trên UDP có khả năng phục hồi chống lại các sự cố kết nối. Mosh cũng có tiếng vang cục bộ, vì vậy bạn có thể thấy những gì bạn đang gõ, ngay cả khi máy chủ không trả lời. Khi tổ hợp phím được phát, Mosh đánh dấu văn bản được lặp lại. mosh.mit.edu
Pascal Rosin

41

Như đã lưu ý trong câu trả lời của geekizard, chuỗi thoát ~.sẽ chấm dứt kết nối.

Danh sách đầy đủ các chuỗi thoát và những gì chúng làm có thể được hiển thị bằng cách nhập ~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Làm thế nào để tôi đóng danh sách các chuỗi thoát?
kristianp

3
Bạn không, sau khi nó in danh sách trình tự thoát, nó sẵn sàng chấp nhận cái tiếp theo.
Tejas Kale
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.