it-swarm-vi.com

Thông báo đường ống bị hỏng có nghĩa là gì trong một phiên SSH?

Đôi khi phiên SSH của tôi ngắt kết nối với Write failed: Broken pipe thông điệp. Nó có nghĩa là gì? Và làm thế nào tôi có thể giữ phiên của tôi mở?

Tôi biết về screen, nhưng đó không phải là câu trả lời tôi đang tìm kiếm. Tôi nghĩ rằng đây là một tùy chọn sshd config.

107
Peter Stuifzand

Có thể máy chủ của bạn đóng các kết nối không hoạt động quá lâu. Bạn có thể cập nhật ứng dụng khách của mình (ServerAliveInterval) hoặc máy chủ của bạn (ClientAliveInterval)

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

Để cập nhật máy chủ của bạn (và khởi động lại sshd)

echo "ClientAliveInterval 60" | Sudo tee -a /etc/ssh/sshd_config

Hoặc phía khách hàng:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
92
Gert

Một giải pháp thay thế sẽ là sử dụng mosh - Shell di động . Ngược lại với ssh, nó kết nối qua UDP và hỗ trợ chuyển vùng. Bạn có thể bắt đầu phiên ở nhà, tạm dừng máy tính xách tay của bạn, mang nó đến nơi làm việc/bạn bè/bất cứ nơi nào bạn có internet, bỏ máy tính xách tay của bạn và tiếp tục làm việc như không có gì xảy ra. Nó đặc biệt hữu ích nếu bạn đang sử dụng kết nối internet tệ hại: Nó hiển thị phản hồi tức thì nếu tổ hợp phím của bạn không đến được máy chủ và liên tục cố gắng thiết lập lại kết nối.

Cài đặt và thiết lập rất đơn giản: Hiện tại nó được bao gồm trong tất cả các bản phân phối Linux hiện tại (cộng với một vài bản không phải Linux) và nó phối hợp việc khởi tạo và xác thực phiên thông qua kết nối ssh trước đó. Vì vậy, nếu bạn có thể kết nối qua ssh [email protected] bạn rất có khả năng có thể kết nối với mosh chỉ bằng cách gọi mosh [email protected], nếu các gói mosh được cài đặt ở cả hai đầu.

Lý do chính cho lỗi kết nối là bạn phải truy cập máy chủ trên cổng UDP (phạm vi mặc định: 60000-61000) để mosh hoạt động. Vì vậy, nếu máy chủ đứng sau tường lửa, bạn sẽ không gặp may nếu không thể tự mình đục lỗ ( ngụ ý bảo mật ).

6
Perseids

Nếu bạn muốn có thời gian kết nối lâu hơn, trong ứng dụng khách thêm:

echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | tee -a ~/.ssh/config

ServerAliveCountMax theo mặc định, giá trị này được đặt thành 3. Do đó, khi ServerAliveInterval đã gửi 3 gói thông tin nhỏ đến máy chủ của bạn, nó sẽ tự động đăng xuất. Đặt nó thành 1200 có nghĩa là quá trình này sẽ phải xảy ra ít nhất 1200 lần. Nói tóm lại, bạn nên kết nối ít nhất 30 * 1200 giây (10 giờ).

5
Francisco Costa

Điều này thường có nghĩa là kết nối mạng (TCP) của bạn đã được đặt lại. Ví dụ. nhà cung cấp internet của bạn kết nối lại với bạn hoặc một cái gì đó như thế này.

2
maxschlepzig

Tôi đã có cùng một vấn đề nhưng nó không như mong đợi. Nếu bạn thấy rằng trên cùng một mạng, một máy chủ khác đang thử cùng một địa chỉ IP, bạn sẽ gặp phải vấn đề tương tự. Để giải quyết vấn đề này, bạn cần kiểm tra xem có máy chủ nào khác sử dụng cùng địa chỉ IP của bạn không. Điều này có thể được thực hiện bằng cách sử dụng lệnh arp.

Tôi đang sử dụng Debian vì vậy đây là một mẫu các lệnh mà tôi sử dụng để xác định xem một máy chủ khác có thực sự sử dụng cùng một địa chỉ IP không

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

Bạn sẽ nhận thấy hai bộ địa chỉ mac sử dụng cùng một địa chỉ IP. Tránh xung đột bằng cách đặt một địa chỉ IP khác.

1
Bill Ang

Một nguyên nhân khác cho "Thông báo đường ống bị hỏng" là do một máy khác đang cố sử dụng cùng một IP với Máy chủ của bạn.

Một cách đơn giản để kiểm tra xem có ai khác đang sử dụng IP đó không:

  1. Tắt máy chủ của bạn
  2. ping cùng một IP để xem máy khác có đang sử dụng IP đó không

Để tìm ra máy nào trên mạng của bạn, bạn có thể sử dụng tiêu đề câu hỏi Unix & Linux này: Cách tìm những máy khác được kết nối với mạng cục bộ .

0
Josir