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


103

Đôi khi phiên SSH của tôi ngắt kết nối với một Write failed: Broken pipetin nhắn. 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 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 sshdtùy chọn cấu hình.

Câu trả lời:


89

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 máy khách của bạn ( 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 máy của bạn sshd)

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

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

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

Lưu ý rằng đôi khi "* AliveInterval" không đủ stackoverflow.com/questions/10665267/ Lời
rogerdpack 18/215

1
Không có ~/.ssh/configtrên máy Mac của tôi, tôi có phải tạo nó ở đó không hoặc nó ở đâu đó?
AGamePlayer

5
@AwQiruiGuo Có, bạn nên tạo thư mục ( ~/.ssh) trước. Vì vậymkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

Một giải pháp thay thế sẽ là sử dụng mosh- vỏ 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ỏ qua 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. Điều này đặ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ó điều phối 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 thông qua ssh user@serverbạn rất có khả năng có thể kết nối với mosh chỉ bằng cách gọi mosh user@server, 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 hầu như không gặp may nếu không thể tự mình đục lỗ ( hệ lụy bảo mật ).


3

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' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMaxtheo 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
Tại sao sử dụng sudo cho một tệp thuộc về người dùng hiện tại hoặc chưa tồn tại?
Hubert Grzeskowiak

2

Đ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.


1

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 arplệnh.

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.


0

Một nguyên nhân khác cho "Thông báo ố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ộ .

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.