thiết bị đầu cuối bị treo khi mất kết nối và ssh được bật


18

Khi tôi ssh đến một máy chủ qua internet trong tab thiết bị đầu cuối gnome, nếu tôi bị mất kết nối internet, tab thiết bị đầu cuối sẽ bị treo và không chấp nhận bất kỳ đầu vào nào. Tại sao nó bị treo?

Có cách nào để kích hoạt tab terminal, tức là làm cho nó tiếp tục chạy tiến trình shell cục bộ?

Là đóng tab thiết bị đầu cuối là cách duy nhất?

Câu trả lời:


20

Kết nối SSH tự động tắt sau một khoảng thời gian xác định được đặt bởi ClientAliveIntervalClientAliveCountMaxcác tham số và tương đương phía máy khách của chúng. Nếu những khoảng thời gian này khá cao, bạn sẽ trải nghiệm một lớp vỏ đông lạnh. Tuy nhiên, nếu bạn sử dụng, OpenSSHbạn không phải chờ quá thời gian chờ và có thể buộc đóng kết nối bằng các ký tự thoát :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

Khi kết nối đóng băng nhấn ~(có nghĩa là Shift+ `phím cùng nhau), nhả nó và nhấn .. Ngoài ra, nếu bạn làm việc với một kết nối không ổn định hoặc cần phải được kết nối với máy chủ từ xa mọi lúc bạn có thể sử dụng autossh để tự động gia hạn kết nối bị mất, nó rất thuận tiện.

CHỈNH SỬA :

Tuy nhiên, nếu cả hai ClientAliveIntervalServerAliveIntervalđược đặt thành 0 rõ ràng hoặc không được đặt rõ ràng và sau đó được đặt thành 0 theo mặc định sshd_configvà các ssh_configtrang, các cài đặt thời gian chờ được đặt trong các tệp sau (từ http://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

Bạn có thể sửa đổi 3 tệp này chỉ bằng cách sử dụng echovà thấy rằng phiên SSH bị đóng băng bị ngắt kết nối theo các giá trị này.


6
Tôi muốn thêm rằng ssh chỉ nhận ra ký tự thoát của nó ban đầu hoặc sau Enter. Khi kết nối ssh bị kẹt, Enter thường xuyên nhưng không phải luôn là ký tự cuối cùng mà bạn đã nhấn trước đó. Vì vậy, có lẽ tốt hơn để làm quen với Enter ~ .trình tự chấm dứt kết nối.
egmont

Cảm ơn. Tôi vẫn chưa rõ làm thế nào /proc/sys/net/ipv4/tcp_keepalive*các tập tin ClientAliveIntervalServerAliveInterval làm việc với nhau? Có phải tất cả đều cho cùng một cài đặt tức là giữ cho kết nối ssh tồn tại? Có phải các tệp trước đây không chỉ dành cho kết nối ssh mà còn các kết nối TCP khác không?
Tim

Một câu hỏi khác: tại sao "Nếu những khoảng thời gian này khá cao, bạn sẽ gặp phải tình trạng đóng băng." Bạn có ý nghĩa gì bởi "thời gian chờ khá cao"? Không phải vỏ luôn bị đóng băng, nếu thiếu hoạt động trong khoảng thời gian xác định? hoặc bạn có nghĩa là trong một số trường hợp thiếu hoạt động, vỏ không bị đóng băng mà tự động thoát ra?
Tim

@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*không chỉ cho ssh(d)mà như trong tài liệu tôi đã liên kết đến:Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
Arkadiusz Drabchot

@Tim: 2. Khá cao có nghĩa là 2 giờ chẳng hạn - bạn sẽ phải chờ 2 giờ trước khi phiên bị ngắt kết nối. Thực hiện kiểm tra - kết nối với máy chủ từ xa, tắt sshdtrên điều khiển từ xa hoặc rút cáp và kiểm tra khi phiên đông lạnh ssh sẽ tự thoát. Bởi frozen shelltôi có nghĩa là vỏ mà không hoạt động, không có bất kỳ phím và không in bất cứ điều gì.
Arkadiusz Drabchot
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.