Mengapa tidak menggunakan% h pada opsi ControlPath OpenSSH ssh?

12

Mengapa halaman manual "ssh_config (5)" merekomendasikan bahwa ControlPathopsi harus mengandung setidaknya %h, %pdan %rplaceholder untuk mengidentifikasi secara unik setiap koneksi bersama?

Saya pikir beberapa sesi harus berbagi soket yang sama dengan koneksi ke host yang sama. Bukankah lebih masuk akal jika memiliki definisi sederhana seperti:

ControlPath ~/.cache/ssh/mux/%h

Alih-alih sesuatu seperti:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

Dalam pemahaman saya dengan definisi pertama, satu koneksi dibagi antara beberapa sesi dengan pengguna jarak jauh yang berbeda, ke host jarak jauh yang sama, pada port jarak jauh yang berbeda.

Saya ingin memiliki definisi pertama di bagian default host sehingga cukup untuk mengatakan ssh -o ControlMaster=no.

Saya ingin berbagi koneksi ke host jarak jauh yang sama antara semua sesi yang diprakarsai oleh pengguna lokal yang sama terlepas dari pengguna jarak jauh dan port jarak jauh. Soket klien master harus hidup di bawah direktori home pengguna lokal.

Tim Friske
sumber
"Saya ingin berbagi koneksi ke host jarak jauh yang sama antara semua sesi yang diprakarsai oleh pengguna lokal yang sama terlepas dari pengguna jarak jauh dan port jarak jauh." Jawaban singkat: Anda tidak bisa . Saya telah menambahkan semacam penjelasan dalam jawaban saya.
goldilocks

Jawaban:

12

"Saya pikir beberapa sesi harus berbagi soket yang sama dengan koneksi ke host yang sama."

Mereka bisa. Namun, perhatikan bahwa jika Anda terhubung ke host menggunakan koneksi yang ada melalui ControlPath, terlepas dari pengguna yang Anda ingin login, Anda akan login sebagai pengguna asli koneksi. Mis., Tanpa koneksi yang mapan ke "suatu tempat":

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

Sesi ini adalah bob @ suatu tempat.

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

Sesi ini juga akan menjadi bob @ suatu tempat, karena Anda menggunakan ControlPath dan set yang sama ControlMaster=no; jika ControlMaster=yes, Anda akan masuk sebagai sue, tetapi ssh akan mengabaikan argumen ControlPath Anda, sebagaimana tersirat dalam man ssh_config:

Sesi tambahan dapat terhubung ke soket ini menggunakan ControlPath yang sama dengan ControlMaster diatur ke 'tidak' .

Sebagai bukti tentang hal ini, jika ControlMaster=yesdalam kedua kasus, ketika bob keluar dari soket ControlPath ~/.ssh/somewhereakan hilang meskipun sesi "sue" masih berjalan, berarti sesi sue tidak pernah menggunakan soket itu .

Jadi, jika Anda ingin menggunakan koneksi yang sama, %hbaik-baik saja, tetapi berhati-hatilah karena Anda tidak dapat berbagi koneksi sebagai beberapa pengguna jarak jauh yang berbeda - ssh tidak akan membiarkan Anda.

goldilocks
sumber
Terima kasih banyak. Sebelum jawaban rumit Anda, saya melewatkan fakta, bahwa tidak mungkin untuk berbagi soket master klien antara pengguna remote yang berbeda tanpa pada saat yang sama pengguna remote kedua mengasumsikan identitas yang pertama.
Tim Friske
5

Anda dapat memiliki banyak pengguna dan banyak port yang digunakan bahkan untuk server yang sama. Saya sendiri, saya terhubung ke ratusan sistem di intranet perusahaan, sebagian besar memiliki banyak pengguna dengan berbagai fungsi atau server aplikasi. Akses ke userA sangat berbeda dengan akses ke userB, dan koneksi master harus berbeda. Lebih singkatnya, jika Anda menjalankan:

$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA

Seperti yang Anda lihat, kita tidak mendapatkan sesi OpenSSH dengan userB, tetapi yang asli dengan userA. Itu berarti bahwa direktori home, izin dan bahkan otentikasi itu sendiri tidak seperti yang diharapkan. Menggunakan ini, jika Anda mencoba untuk menghapus file dalam direktori userB, maka a) itu bisa menjadi file yang salah dan b) itu bisa salah izin.

Jika Anda tidak akan pernah terhubung ke lebih dari satu pengguna di satu server menggunakan satu port, maka ya, menggunakan %hbisa cukup. Dalam ~/.ssh/configfile Anda, Anda ingin menggunakan:

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

Dengan ControlPersistopsi, koneksi master tetap terbuka di latar belakang sampai terbunuh atau diakhiri dengan ssh -O exit. Ini adalah fitur set-it-and-forget-it yang bagus.

Tetapi jika ada setiap kemungkinan menghubungkan ke lebih dari satu pengguna pada satu tuan rumah, maka Anda akan menginginkan sesuatu yang lebih aman:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes
Arcege
sumber
Saya masih bingung. Saya mencoba mengklarifikasi skenario konfigurasi dan maksud saya dalam paragraf "Saya ingin". Bisakah ada di antara Anda yang menjawab pertanyaan saya lebih tepat dengan informasi tambahan ini?
Tim Friske