Tự động sinh ra quá trình nền ControlMaster khi truy cập lần đầu vào hệ thống từ xa ssh


9

Gần đây tôi thường sử dụng tính năng ControlMaster của máy khách SSH, cho phép tôi sử dụng một kết nối SSH-TCP duy nhất cho nhiều hệ vỏ và chuyển tiếp cổng tới cùng một hệ thống từ xa. Điều khó chịu nhất về điều này là, quá trình của lớp vỏ đầu tiên được mở sẽ tự động trở thành ControlMaster. Điều đó có nghĩa là, nếu quá trình này bị chấm dứt, tất cả các shell và chuyển tiếp cổng khác sử dụng kết nối chính điều khiển sẽ không khả dụng.

Tôi thực sự muốn khi lệnh ssh đầu tiên đến một hệ thống từ xa sẽ sinh ra một quá trình nền bổ sung giữ kết nối miễn là vẫn có các kết nối sử dụng kết nối ControlMaster, vì vậy tôi có thể chỉ cần đóng các shell thực sự mà không gặp sự cố nào khác. kết nối. Lý tưởng nhất là quá trình ControlMaster nền thậm chí có thể được cấu hình để chờ một khoảng thời gian để các shell mới hoặc chuyển tiếp cổng sử dụng ControlMaster trước khi tắt.

Có cách nào để làm cho khách hàng ssh làm điều đó không? Tôi biết tôi có thể tạo một kết nối như vậy bằng tay trước khi sử dụng ssh để tạo shell đầu tiên, nhưng tôi rõ ràng muốn điều này tự động xảy ra bởi vì nếu không tôi chắc chắn sẽ quên làm điều đó mọi lúc mọi nơi.

Để tập lệnh trình bao bọc thực hiện cũng sẽ không dễ dàng vì tôi thường sử dụng các tốc ký được cấu hình cho tên máy chủ từ xa trong .ssh / config và ổ cắm ControlMaster được tạo bằng tên USERNAME @ NETWORK_NAME: NETWORK_PORT làm tên. Vì vậy, một trình bao bọc sẽ cần phải hiểu .config / ssh hoàn hảo để hoạt động như dự định.

Câu trả lời:


10

Bạn nên sử dụng tùy chọn cấu hình ControlPersist.

 ControlPersist
         When used in conjunction with ControlMaster, specifies that the
         master connection should remain open in the background (waiting
         for future client connections) after the initial client connec‐
         tion has been closed.  If set to “no”, then the master connection
         will not be placed into the background, and will close as soon as
         the initial client connection is closed.  If set to “yes”, then
         the master connection will remain in the background indefinitely
         (until killed or closed via a mechanism such as the ssh(1) “-O
         exit” option).  If set to a time in seconds, or a time in any of
         the formats documented in sshd_config(5), then the backgrounded
         master connection will automatically terminate after it has
         remained idle (with no client connections) for the specified
         time.

ControlPersist no là hành vi mặc định, giống như bạn mô tả. Tôi sử dụng ControlPersist 4h để cho phép các phiên nền tự dọn dẹp định kỳ.


Điều này có sẵn trên RHEL không?
ewwhite

1
@ewwhite Tôi không có RHEL, nhưng CentOS cũng vậy. Đó là trong CentOS 7, nhưng dường như không có trong CentOS 6.5. Thay đổi mở cửa cho thấy nó đã được thêm vào trong openssh 5.6 và CentOS 6.x chỉ có 5.3 (7.0 đã mở ra 6.4)
Daniel Lawson
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.