Secara otomatis menelurkan proses latar belakang ControlMaster pada akses pertama ke sistem remote ssh

9

Akhir-akhir ini saya sering menggunakan fitur ControlMaster klien SSH, yang memungkinkan saya menggunakan koneksi SSH-TCP tunggal untuk beberapa shell dan penerusan port ke sistem jarak jauh yang sama. Hal yang paling menyebalkan tentang ini adalah, bahwa proses shell pertama yang dibuka menjadi ControlMaster secara otomatis. Itu berarti, jika proses ini dihentikan, semua shell dan penerusan port lain menggunakan koneksi master kontrol menjadi tidak tersedia.

Saya benar-benar ingin ketika perintah ssh pertama ke sistem jarak jauh akan menelurkan proses latar belakang tambahan yang memegang koneksi selama masih ada koneksi menggunakan koneksi ControlMaster, jadi saya bisa menutup kerang yang sebenarnya tanpa harus mengambil risiko crash lainnya koneksi. Idealnya proses ControlMaster latar belakang bahkan dapat dikonfigurasi untuk menunggu sejumlah waktu untuk shell baru atau penerusan port untuk menggunakan ControlMaster sebelum akhirnya dimatikan.

Apakah ada cara untuk membuat klien ssh melakukan hal seperti itu? Saya tahu saya bisa membuat koneksi seperti itu secara manual sebelum menggunakan ssh untuk membuat shell pertama, tetapi saya secara eksplisit ingin ini terjadi secara otomatis karena kalau tidak saya pasti akan lupa melakukannya setiap sekarang dan kemudian.

Membiarkan skrip pembungkus melakukannya juga tidak akan semudah itu karena saya sering menggunakan steno yang dikonfigurasi untuk nama server jarak jauh di .ssh / config dan soket ControlMaster dibuat menggunakan USERNAME @ NETWORK_NAME: NETWORK_PORT sebagai nama. Jadi pembungkus perlu memahami .config / ssh dengan sempurna agar berfungsi sebagaimana dimaksud.

aef
sumber

Jawaban:

10

Anda harus menggunakan opsi konfigurasi 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 adalah perilaku default, yang seperti yang Anda gambarkan. Saya menggunakan ControlPersist 4h untuk memungkinkan sesi latar belakang membersihkan diri secara berkala.

Daniel Lawson
sumber
Apakah ini tersedia di RHEL?
ewwhite
1
@white saya tidak punya RHEL, tetapi CentOS harus sama. Ada di CentOS 7, tetapi tampaknya tidak berada di CentOS 6.5. The openssh changelog menyarankan itu ditambahkan dalam openssh 5.6, dan CentOS 6.x hanya memiliki 5.3 (7.0 memiliki openssh 6.4)
Daniel Lawson