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


Tôi thường xuyên ssh vào hộp của tôi ở nhà từ trường, nhưng thường là khi tôi thay đổi các 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+z và Ctrl+d khô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, là có một cách dễ dàng để làm cho ssh chết đúng cách (tức là khi đường ống thất bại "bình thường" nó sẽ thoát ra với một thông điệp về một đường ống bị hỏng)? Hay tôi phải tìm ra PID là gì và tự sát nó?


343
2018-03-11 16:22


gốc


Nếu tôi bị ngắt kết nối với một phiên SSH hoạt động, nó sẽ bị đó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 nào 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 nó 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 Những hạn chế của tôi bằng cách sử dụng mosh (kể từ hai phút trước) là tôi không biết làm thế nào để ngắt kết nối nó. Tôi đang sử dụng một phiên tmux + irssi trên một máy chủ từ xa (như một bouncer IRC, loại) và tôi muốn ngắt kết nối đôi khi (trong khi vẫn giữ tmux + irssi chạy) và tôi đã làm với <enter> + ~ +. sử dụng SSH nhưng sẽ không hoạt động khi sử dụng mosh. - Pavel Šimerda


Các câu trả lời:


Các phím thông thường được chuyển tiếp qua ssh phiên, vì vậy không ai trong số đó sẽ hoạt động. Thay vào đó, hãy sử dụng chuỗi thoát. Để giết các phiên hiện tại hit sau đó Nhập ↵, ~, ..

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

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 Chuỗi thoát bằng cách nhấn đi vào.

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 N lồng nhau ssh kết nối bằng cách nhấn ~  N lần. (Điều này chỉ áp dụng cho ~s trực tiếp theo dõi đi vào.) Đó là để nói rằng đi vào~~~~~. chấm dứt một ssh phiên 5 lớp sâu và giữ nguyên 4 phần còn lại.


478
2018-03-11 17:18



Đối với bố cục bàn phím trong đó ~ là một phím chết, chuỗi khóa là Enter  ~  Space  .. - Søren Løvborg
tôi có thêm nhiều trình tự thoát hơn có thể hữu ích. :) - gertvdijk
Lưu ý rằng bạn cần bỏ ghi chú dòng EscapeChar ~ trong /etc/ssh/ssh_config (hoặc là ~/.ssh/ssh_config nếu bạn thích). - Aditya M P
@Hitechcomputergeek Enter  ~  ~  . Vì ~  ~ gửi một chữ ~ thông qua phiên SSH của bạn, phiên SSH thứ hai sẽ nhận nó như một dấu ngã đơn và sẽ giải thích . như một phần của lối thoát. Để gửi đến phiên ssh lồng nhau thứ 5, chỉ cần sử dụng 5 dấu ngã trong chuỗi thoát của bạn. - Score_Under
thay đổi cuộc sống ;) - artm


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

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

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

Trái ngược 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 phải là giả mạo.


Nó đang được lưu ý rằng những người giữ-alives cũng giúp, uhm, giữ dài không tải các kết nối còn sống, tức là ngăn không cho bạn nửa đóng các phiên tcp treo trong giờ bị ảnh hưởng.

Tôi khuyên bạn nên bật tính năng này nếu bạn thường xuyên sử dụng tính năng này, nhưng bạn cũng nên biết về rủi ro bảo mật nhỏ mà nó có thể áp dụng. A cuộc tấn công rõ né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 kết nối không hoạt động. Đây có thể là lý do tại sao nó không được kích hoạt theo mặc định.


51
2018-03-11 18:51



Lý do an ninh. Bạn có thể đi uống rượu và để sshio ssh mở và đối tác trong phòng thí nghiệm bạn đã làm việc trong 20 năm qua có thể sử dụng phiên của bạn để cướp máy chủ và tiêu diệt nó ... trong khi bạn uống trong 10 phút nghỉ. - Luis Alvarado♦
@CYREX, eh? Và làm thế nào có thể tắt theo tùy chọn mặc định ngăn cản bạn có đối tác phòng thí nghiệm không công bằng? %) - ulidtko
@ulidtko: Có lý do nào để không thiết lập không ServerAliveInterval 1 để kết nối bị mất được phát hiện ngay lập tức? - krlmlr
tôi có cải thiện bài đăng với kiến ​​thức của tôi về nó cùng với các bản sửa lỗi khác. Tôi nghĩ nó không phải các trả lời cho câu hỏi vì nó là nhiều hơn về ngăn ngừa chứ không phải là sửa chữa một đã bị hỏng. - gertvdijk
@gertvdijk: Cảm ơn bạn. Đối với tôi, nó hoạt động ngay cả khi không có Host hàng. Ngoài ra, "Mật mã 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 rõ ràng." (từ liên kết bạn đã thêm) ... - krlmlr


Như đã lưu ý trong câu trả lời của geekosaur, trình tự 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ì họ thực hiện 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.)

39
2018-03-15 06:39



Làm cách nào để đóng danh sách các chuỗi thoát? - kristianp
Bạn không, sau khi nó in danh sách chuỗi thoát, sẵn sàng chấp nhận danh sách tiếp theo. - Tejas Kale