it-swarm-vi.tech

Cách kết nối lại với phiên ssh bị ngắt kết nối

Có cách nào để kết nối với một phiên ssh bị ngắt kết nối không? Chúng tôi đang gặp sự cố với kết nối mạng của mình đến một trang web từ xa mà chúng tôi đang làm việc riêng; tuy nhiên, trong thời gian đó, chúng tôi gặp phải một số lượng lớn các ngắt kết nối do các gói bị mất trong khi kết nối với các máy chủ tại địa điểm từ xa. Nhiều lần phiên vẫn hoạt động trong một thời gian và đôi khi nó xảy ra ở giữa một số hành động (chỉnh sửa tệp, chạy một số quy trình, v.v.) mà tôi cần quay lại thay vì khởi động lại nếu có thể.

164
palehorse

CẬP NHẬT: Để có câu trả lời thực tế, hãy xem câu trả lời của zero_r bên dưới

Đây không phải là một câu trả lời, nhưng một cách giải quyết. Sử dụng màn hình .

Khi bạn đăng nhập lần đầu, hãy chạy màn hình. Bạn nhận được một Shell khác, chạy các lệnh trong đó. Nếu bạn bị ngắt kết nối, quy trình màn hình sẽ giữ cho thiết bị đầu cuối tồn tại để Shell của bạn và các quy trình mà nó đang chạy không bị đổ. Khi bạn kết nối lại, hãy chạy 'screen -r' để tiếp tục.

Có rất nhiều thứ để cấu hình và sử dụng màn hình, nhưng những điều trên sẽ giải quyết vấn đề của bạn.

142
kbyrd

Hãy thử đặt ClientAliveInterval (ví dụ: 60) và TCPKeepAlive (có hoặc không) thành các giá trị phù hợp trên sshd.conf bên máy chủ.

Điều này sẽ giữ cho phiên của bạn tồn tại ngay cả khi kết nối bị mất trong vài phút.

134
zero_r

Như đã đề cập ở trên, GNU Screen là cách để đi. Nó sẽ cho phép bạn có một 'phiên màn hình' trên hộp từ xa để bạn có thể chạy nhiều lệnh trong, thông qua nhiều 'cửa sổ màn hình'. Điều này chỉ đơn giản là tách ra nếu kết nối SSH cha của bạn chết, giữ cho tất cả các quy trình con hoạt động trong đó vẫn hoạt động tốt.

'man screen 'là bạn của bạn như bình thường và gói hệ điều hành nên được gọi là' screen 'nếu nó không được cài đặt theo mặc định.

Khái niệm cơ bản là:

  • Bắt đầu một phiên màn hình (trên Máy chủ từ xa của bạn):

    $ screen
    
  • Ngắt kết nối khỏi phiên màn hình của bạn: CTRL-Ad

  • Kết nối lại với phiên màn hình của bạn sau khi đăng nhập lại:

    $ screen -d -r
    
  • Mở một 'cửa sổ' màn hình khác: CTRL-Ac

  • Xoay vòng qua cửa sổ mở màn hình: CTRL-Aspace

Có rất nhiều những thứ tuyệt vời bạn có thể làm với Màn hình. Tôi đã sử dụng nó hơn 10 năm và vẫn đang tìm hiểu các tính năng mới. Đây là tiện ích Unix yêu thích của tôi.

64
Mike Pountney

Tôi không thể tin rằng không ai đã đề cập MOSH ;

Mosh là một giao thức riêng biệt có thể nối vào quá trình đăng nhập SSH, nó giữ cho phiên của bạn tồn tại sau nhiều ngày bị ngắt kết nối, thay đổi IP, độ trễ cao, v.v. Nó được giải thích trên trang chủ tốt hơn tôi có thể giải thích nó vì vậy tôi đã sao chép mô tả dưới đây. Kinh nghiệm và lời khuyên của tôi là tôi sử dụng nó trên điện thoại di động Android, đó là một trình bảo vệ cuộc sống khi đi du lịch và SSH. Điều tương tự cũng đúng trên máy tính xách tay của tôi khi kết nối với điện thoại di động trên tàu chẳng hạn . Tôi khuyên bạn nên biên dịch từ nguồn để có phiên bản mới nhất, phiên bản repo cho tôi bên trong Ubuntu có một vài phiền toái trong đó được khắc phục trong phiên bản mới nhất (tại thời điểm viết).

Mosh (vỏ di động)

Ứng dụng thiết bị đầu cuối từ xa cho phép chuyển vùng, hỗ trợ kết nối không liên tục và cung cấp tiếng vang thông minh cục bộ và chỉnh sửa dòng phím của người dùng.

Mosh là một sự thay thế cho SSH. Nó mạnh mẽ và phản hồi nhanh hơn, đặc biệt là qua các liên kết Wi-Fi, di động và đường dài.

Mosh là phần mềm miễn phí, có sẵn cho GNU/Linux, FreeBSD, Solaris, Mac OS X và Android.

Các tính năng từ trang web:

  • Thay đổi IP. Luôn kết nối : Mosh tự động chuyển vùng khi bạn di chuyển giữa các kết nối Internet. Sử dụng Wi-Fi trên tàu, Ethernet trong khách sạn và LTE trên bãi biển: bạn sẽ đăng nhập. Hầu hết các chương trình mạng bị mất kết nối sau khi chuyển vùng, bao gồm cả ứng dụng SSH và Web như Gmail. Mosh thì khác.

  • Tạo nên những giấc mơ ngọt ngào : Với Mosh, bạn có thể đặt máy tính xách tay của mình vào giấc ngủ và đánh thức nó sau, giữ nguyên kết nối của bạn. Nếu kết nối Internet của bạn bị rớt, Mosh sẽ cảnh báo bạn - nhưng kết nối sẽ hoạt động trở lại khi dịch vụ mạng hoạt động trở lại.

  • Loại bỏ độ trễ mạng : SSH đợi câu trả lời của máy chủ trước khi hiển thị cho bạn cách gõ của riêng bạn. Điều đó có thể làm cho một giao diện người dùng tệ hại. Mosh thì khác: nó cung cấp phản hồi tức thì cho việc gõ, xóa và chỉnh sửa dòng. Nó thực hiện điều này một cách thích ứng và hoạt động ngay cả trong các chương trình toàn màn hình như emacs và vim. Trên một kết nối xấu, các dự đoán nổi bật được gạch chân để bạn sẽ không bị nhầm lẫn.

  • Không có mã đặc quyền. Không có daemon : Bạn không cần phải là siêu người dùng để cài đặt hoặc chạy Mosh. Máy khách và máy chủ là các tệp thực thi được chạy bởi một người dùng thông thường và chỉ tồn tại trong vòng đời của kết nối.

  • Phương thức đăng nhập tương tự : Mosh không nghe trên các cổng mạng hoặc xác thực người dùng. Ứng dụng khách mosh đăng nhập vào máy chủ thông qua SSH và người dùng trình bày cùng thông tin đăng nhập (ví dụ: mật khẩu, khóa chung) như trước đây. Sau đó Mosh chạy máy chủ mosh từ xa và kết nối với nó qua UDP.

  • Chạy bên trong thiết bị đầu cuối của bạn, nhưng tốt hơn : Mosh là một chương trình dòng lệnh, như ssh. Bạn có thể sử dụng nó bên trong xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen hoặc tmux. Nhưng mosh được thiết kế từ đầu và chỉ hỗ trợ một bộ ký tự: UTF-8. Nó sửa các lỗi Unicode trong các thiết bị đầu cuối khác và trong SSH.

  • Control-C hoạt động rất tốt : Không giống như SSH, giao thức dựa trên UDP của mosh xử lý mất gói một cách duyên dáng và đặt tốc độ khung hình dựa trên các điều kiện mạng. Mosh không lấp đầy bộ đệm mạng, vì vậy Control-C
    [.__.] luôn hoạt động để ngăn chặn quá trình chạy trốn.

47
jwbensley

autossh xem kết nối của bạn và nếu nó bị hỏng, nó sẽ kết nối lại. Nó đáng tin cậy hơn thủ tục. Nếu bạn kết nối với phiên màn hình, bạn sẽ tiếp tục ngay từ nơi bạn bị ngắt kết nối (xem rscreen đi kèm với tự động lưu)

20
hayalci

tmux

Điều này là một cổ điển. Sử dụng nó bất cứ khi nào bạn có nguy cơ mất kết nối với thiết bị đầu cuối.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Cứ như vậy, bạn sẽ hoạt động trở lại.

14
Jacksonkr

Tôi sẽ cài đặt và bắt đầu màn hình để khắc phục vấn đề của bạn. Màn hình sẽ cho phép bạn kết nối lại với phiên màn hình trước đó.

Ngoài ra, màn hình cũng cho phép bạn làm những việc hay ho như chia màn hình, xem bảng điều khiển, v.v. Bạn có thể tìm thêm thông tin tại đâytại đây .

Để bắt đầu, nếu bạn bị ngắt kết nối, bạn có thể sử dụng

screen -ls

để xem các phiên của bạn và

screen -r ${session} 

để kết nối lại với một người bị ngắt kết nối.

10
wzzrd

Như những người khác đã chỉ ra, màn hình nói chung là giải pháp tốt nhất cho việc này và nó cũng bổ sung thêm một loạt các tính năng hữu ích khác.

Bạn có thể thiết lập hồ sơ của mình trên máy từ xa để tự động khởi động và/hoặc kết nối lại với màn hình khi đăng nhập, điều này giúp bạn quên việc bắt đầu màn hình một lần bạn cần vì bạn bị mất kết nối.

Xem http://tlug.dnho.net/?q=node/239 (hoặc tìm kiếm Google cho nhiều ví dụ khác có các cách hơi khác nhau).

4
David Spillett

Đây là một giải pháp phi màn hình khác.

Khay PuTTY cho phép bạn làm điều đó, nó có kết nối lại tùy chọn ngắt kết nối không thường xuyên hoặc PuTTY-ng

https://puttytray.goeswhere.com/

đó là một ngã ba (nguồn mở hoàn toàn) của PuTTY với các tùy chọn khác, đi đến cài đặt kết nối và có 2 tùy chọn, một cho 'cố gắng kết nối lại khi lỗi kết nối' và 'cố gắng kết nối lại khi khởi động'.

3
munkiepus

một sự thay thế hiện đại hơn cho màn hình, tuy nhiên không có sẵn cho một số loại "ảo hóa" (ví dụ: trong cygwin bạn có thể có "màn hình", nhưng không phải là "tmux" do cách thiết kế của nó), nhưng bất cứ nơi nào bạn có tùy chọn để cài đặt tmux , Tôi thực sự khuyên bạn nên sử dụng màn hình đó.

3
cepal

Mặc dù màn hình sẽ giữ phiên Shell của bạn mở trên máy chủ từ xa nếu phiên ssh của bạn giảm, nhưng nó sẽ không làm gì về vấn đề kết nối ssh bị hủy. Như zero_r gợi ý, hãy thử điều chỉnh kết nối ssh của bạn với việc giữ liên lạc và thời gian chờ lâu.

Tôi đề nghị bạn theo dõi nguyên nhân của các gói bị mất gây ra sự cố và khắc phục thay vì xử lý xung quanh nó.

2
David

Đôi khi tôi quên chạy màn hình quá và mất công việc còn dang dở. Trong trường hợp này, mặc dù chúng tôi không thể gắn lại phiên SSH bị hỏng, việc sửa lại chương trình đang chạy sang thiết bị đầu cuối mới và tiếp tục lại những gì bạn đang làm vẫn có thể nhờ reptyr.

Sau khi vô tình ngắt kết nối với phiên SSH, điều đầu tiên trước tiên là chạy screen kẻo kết nối sẽ bị hỏng lần nữa. Sau đó, trong phiên mới, chạy ps aux | grep {The process to be resumed} để có được PID. Với PID, bạn có thể thử reptyr {PID} hoặc là reptyr -T {PID} (nếu có quy trình con) để tiếp tục công việc.

2
march_happy