autossh không giết ssh khi liên kết xuống


10

Tôi đã bắt đầu autossh của mình với thời gian bình chọn là 30 giây:

AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1

Và nó hoạt động tốt:

Sep  5 12:26:44 serverA autossh[20935]: check on child 23084
Sep  5 12:26:44 serverA autossh[20935]: set alarm for 30 secs

Nhưng nếu tôi gỡ bỏ cáp mạng một cách vật lý, có nghĩa là đường hầm không thể hoạt động được nữa, autossh sẽ không giết semon daemon. Tại sao? Tôi hiểu rằng autossh không thể làm bất cứ điều gì nếu liên kết không hoạt động, nhưng theo tôi nên cố gắng làm như sau:

  1. Xác minh quá trình ssh con ( check on child ...)
  2. Xác nhận cuối cùng !!! (một hoạt động giống như ping thông qua đường hầm)
  3. Nhận ra rằng đường hầm bị sập
  4. Dừng quá trình ssh
  5. Cố gắng tạo lại đường hầm
  6. Nhận ra rằng nó không hoạt động và thiết lập bộ hẹn giờ (tăng theo cấp số nhân?) Để sớm kiểm tra lại

Đó là lý do tại sao tôi đang chạy autossh: nếu có gì đó xảy ra với đường hầm (có thể là sự cố phần mềm hoặc phần cứng), thì nên thử khởi động lại nó. Thay vào đó, nó chỉ chờ quá trình ssh chết. Không nên cố gắng khởi động lại nó, ngay cả khi không có hy vọng thiết lập lại kết nối?

Những loại kiểm tra đang làm autossh? Chỉ cần xác minh rằng các ssh là lên và chạy? Nó không làm bất kỳ loại kiểm tra xa?

Biên tập

Theo yêu cầu, tôi thêm phần có liên quan của cấu hình ssh:

# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
#   that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
#   be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
#   be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
#   specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60

TCPKeepAlive yes

Còn việc cố gắng giảm thời gian chờ thì sao?
Nikolaidis Fotis

Chúng tôi đã sử dụng autossh trong một thời gian, nhưng nó quá không đáng tin cậy đối với các kết nối không ổn định, đặc biệt khi kết hợp với chuyển tiếp cổng. Bây giờ chúng tôi sử dụng OpenVPN và rất hài lòng với nó.
Nils Toedtmann

@NikolaidisFotis: thời gian chờ là tốt. Đó là ... hết thời gian. Nhưng nó không làm đúng (imho) bất cứ khi nào thời gian chờ kết thúc , cụ thể là: xác minh cuối cùng !
dangonfast

@NilsToedtmann: cảm ơn, tôi sẽ thử. Có dễ thực hiện không? Bạn có bất kỳ liên kết đến một hướng dẫn tốt?
dangonfast

OpenVPN khá đơn giản, chúng tôi chỉ cần 'apt-get install' và bắt đầu với các cấu hình mặc định cho máy chủ hoặc máy khách, sử dụng dev tuncả hai và cài đặt remotetrong cấu hình máy khách. Điều khó chịu duy nhất là quản lý các chứng chỉ. Chúng tôi sử dụng CA 'easy-rsa' đi kèm với OpenVPN. Một khi bạn có chứng chỉ, phần còn lại là dễ dàng.
Nils Toedtmann

Câu trả lời:


11

Nhưng nếu tôi gỡ bỏ cáp mạng một cách vật lý, có nghĩa là đường hầm không thể hoạt động được nữa, autossh sẽ không giết semon daemon. Tại sao?

autossh chạy trên máy khách của bạn, vì vậy nó không thể trực tiếp giết tiến trình ssh daemon trên máy chủ. Tuy nhiên, bạn có thể chỉ định một giá trị khác không cho ClientAliveInterval/etc/ssh/sshd_configtrên máy chủ (xem man sshd_config) và khởi động lại dịch vụ sshd trên máy chủ để áp dụng thay đổi cấu hình. Sau đó, trong trường hợp ngắt kết nối mạng, quá trình ssh daemon sẽ bị ClientAliveInterval * ClientAliveCountMaxhủy sau vài giây (nhưng không phải bằng autossh).

Bây giờ, nếu bạn muốn hỏi "Tại sao autossh không giết tiến trình máy khách ssh?" , bạn đã chỉ định -M 0. Từ trang người đàn ông tự động:

Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit.

Thay vì sử dụng autossh để theo dõi kết nối, bạn đang chờ ssh thoát sau khi hết thời gian ServerAliveCountInterval * ServerAliveCountMaxvài giây. Bạn đã yêu cầu 60 kiểm tra máy chủ còn tồn tại trước khi ssh thoát, với khoảng thời gian 60 giây tách các kiểm tra liên tiếp, vì vậy bạn sẽ đợi một giờ trước khi máy khách ssh của bạn thoát.

Bạn cũng có thể cân nhắc sử dụng ExitOnForwardFailuretùy chọn ở phía máy khách (xem man ssh_config), để ssh sẽ thoát nếu không thể thiết lập đường hầm và sau đó autossh có thể thử khởi chạy lại ssh.


Cảm ơn, điều này có ý nghĩa. Tôi thực sự có nghĩa là "quá trình khách hàng", không phải quá trình máy chủ.
dangonfast

Và sau khi đọc lại trang manossh bây giờ tôi nhớ tại sao tôi đặt -M 0: không dễ sử dụng cổng giám sát và nó được khuyến khích gián tiếp: Theo nhiều cách, đây có thể là một giải pháp tốt hơn cổng giám sát
dangonfast
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.