Menambahkan penerusan port secara terprogram pada sesi SSM ControlMaster

9

Saya baru tahu tentang fitur ControlMaster / ControlPath dari OpenSSH, yang memungkinkan Anda menggunakan koneksi SSH tunggal untuk menjalankan beberapa terminal.

Karena saya sering menggunakan SSH untuk menggunakan penerusan port untuk mendapatkan sesi VNC terenkripsi dan terotentikasi, saya langsung mengenali bahwa Anda tidak dapat menambahkan penerusan port ke server jauh yang sudah Anda miliki koneksi mapan. Ini menyebalkan.

Kadang-kadang nanti saya menemukan bahwa Anda dapat menghindari batasan ini dengan mengetikkan ~ C dalam sesi terminal SSH yang sedang berjalan. Ini membuka baris perintah yang memungkinkan Anda untuk menambah atau menghapus penerusan porta.

Pertanyaan saya sekarang adalah: Bagaimana saya bisa menambahkan penerusan porta pada sesi SSH yang ada yang menggunakan fitur ControlMaster / ControlPath, tanpa perlu memiliki akses ke sesi terminal di dalam sesi SSH itu. Saya perlu ini untuk mengaktifkan skrip saya yang memulai koneksi VNC terowongan aman bagi saya untuk menambahkan dan kemudian menghapus penerusan port-nya.

(Saya tahu saya bisa menggunakan terminal multiplexer seperti GNU Screen atau tmux, sebenarnya saya sudah melakukan ini. Tapi saya suka ide menggunakan hanya satu sesi SSH untuk alasan serveral.)

aef
sumber
1
Saya akan tertarik melihat apakah Anda menemukan cara untuk melakukan ini, tetapi saya kira Anda tidak akan melakukannya. Secara sistematis mengontrol properti dari sesi SSH Anda sebenarnya bukan bagian dari masalah keamanan besar.
Caleb
1
Omong kosong! Bagaimana secara programatik mengontrol properti dari sesi SSH memperkenalkan masalah keamanan yang sangat besar? Solusinya sangat sederhana: serverfault.com/a/340361/93109
aculich
Pertanyaannya sekarang hanya bertanya tentang menambahkan port-forwarding sehingga lebih cocok dengan jawaban yang diterima. Saya mengajukan pertanyaan tentang cara menghapusnya setelah itu di sini: serverfault.com/q/457295/50950
aef

Jawaban:

9

Sebenarnya itu cukup sederhana. Cukup tambahkan ctl_cmd -O forwardke perintah yang ada, dengan demikian:

ssh -M -L5555:localhost:22 remotehost

menjadi:

ssh -O forward -M -L5555:localhost:22 remotehost

The sshhalaman manual membahas -O ctl_cmdopsi:

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

Ini, tentu saja, mengasumsikan Anda telah mengaktifkan file ControlMaster yesAnda ~/ssh/configatau -Mpada baris perintah.

aculich
sumber
1
Bisakah Anda mencoba menjawab pertanyaan terkait di sini: serverfault.com/q/457295/50950
aef