Perché non usare semplicemente% h nell'opzione ControlPath di OpenSSH ssh?


13

Perché le manpage "ssh_config (5)" raccomandano che l' ControlPathopzione contenga almeno i segnaposto e %h, al fine di identificare in modo univoco ogni connessione condivisa?%p%r

Ho pensato che più sessioni dovrebbero condividere lo stesso socket con una connessione allo stesso host. Non avrebbe senso quindi avere una definizione semplice come:

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

Invece di qualcosa come:

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

Nella mia comprensione con la prima definizione, una connessione è condivisa tra più sessioni con diversi utenti remoti, allo stesso host remoto, su porte remote diverse.

Voglio avere la prima definizione nella sezione predefinita dell'host in modo che sia sufficiente dirlo ssh -o ControlMaster=no.

Voglio condividere la connessione allo stesso host remoto tra tutte le sessioni avviate dallo stesso utente locale indipendentemente dall'utente remoto e dalla porta remota. Il socket del client principale dovrebbe trovarsi sotto la home directory dell'utente locale.


"Voglio condividere la connessione allo stesso host remoto tra tutte le sessioni avviate dallo stesso utente locale indipendentemente dall'utente remoto e dalla porta remota." Risposta breve: non puoi . Ho aggiunto una sorta di spiegazione nella mia risposta.
Riccioli d'oro

Risposte:


13

"Ho pensato che più sessioni dovrebbero condividere lo stesso socket con una connessione allo stesso host."

Loro possono. Tuttavia, tieni presente che se ti connetti a un host utilizzando una connessione esistente tramite ControlPath, indipendentemente da quale utente intendi accedere, verrai eseguito l'accesso come utente originale della connessione. Ad esempio, senza alcuna connessione stabilita con "da qualche parte":

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

Questa sessione è bob @ da qualche parte.

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

Questa sessione sarà anche bob @ da qualche parte, perché hai usato lo stesso ControlPath e il set ControlMaster=no; se ControlMaster=yes, saresti loggato come causa, ma ssh avrà ignorato il tuo argomento ControlPath, come implicito in man ssh_config:

Sessioni aggiuntive possono connettersi a questo socket usando lo stesso ControlPath con ControlMaster impostato su 'no' .

A riprova di ciò, se ControlMaster=yesin entrambi i casi, quando Bob esce dal socket ControlPath ~/.ssh/somewherescomparirà anche se la sessione "Sue" è ancora in esecuzione, il che significa che la sessione Sue non ha mai usato quel socket .

Quindi, se vuoi usare la stessa connessione, %hva bene, ma fai attenzione che non puoi condividere una connessione come più utenti remoti diversi - ssh non te lo consente.


Molte grazie. Prima della tua elaborata risposta mi sono perso il fatto che non è possibile condividere il socket principale di un client tra diversi utenti remoti senza che il secondo utente remoto assuma l'identità del primo.
Tim Friske,

5

Potresti avere più utenti e più porte in uso anche per lo stesso server. Io stesso, mi collego a centinaia di sistemi sulle intranet aziendali, la maggior parte ha più utenti con diverse funzioni o server di app. L'accesso all'utente A è molto diverso dall'accesso all'utente B e la connessione principale dovrebbe essere diversa. Più succintamente, se dovessi correre:

$ 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

Come puoi vedere, non otteniamo una sessione OpenSSH con userB, ma l'originale con userA. Ciò significa che la home directory, le autorizzazioni e persino l'autenticazione stessa non sono quelle previste. Usando questo, se dovessi provare a cancellare un file nella directory di userB, allora a) potrebbe essere il file sbagliato eb) potrebbe essere permessi errati.

Se non ti collegherai mai a più di un singolo utente su un singolo server usando una sola porta, allora sì, l'utilizzo %hpotrebbe essere sufficiente. Nel tuo ~/.ssh/configfile, vorresti usare:

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

Con l' ControlPersistopzione, la connessione principale rimane aperta in background fino a quando non viene interrotta o terminata ssh -O exit. Questa è una bella funzione imposta e dimentica.

Ma se c'è alcuna possibilità di collegarsi a più di un utente su un host qualsiasi, allora si vorrebbe qualcosa di più sicuro:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes

Sono ancora confuso. Ho cercato di chiarire lo scenario di configurazione e il mio intento nei paragrafi "Voglio". Qualcuno di voi potrebbe rispondere alla mia domanda in modo più preciso con queste informazioni aggiuntive?
Tim Friske,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.