come sapere se sei in un ssh nidificato?

Aug 21 2020

Sono interessato a sapere se c'è un modo per scoprire se mi trovo in una sessione SSH nidificata e quanti di loro?

Ad esempio, From host2 ssh user1@host1 then from host1 ssh user1@host2 finisce in host1 , ma in realtà posso uscire per andare a host2 .

Come posso sapere che mi trovo in una situazione del genere (in una sessione ssh nidificata), oltre al comando exit ovviamente?

Risposte

2 KamilMaciorowski Aug 21 2020 at 13:09

Non è una soluzione perfetta perché non tutti i client SSH lo supportano; e quelli che lo fanno possono essere configurati in modo diverso. Ancora…

sshda OpenSSH supporta quanto segue :

PERSONAGGI DI FUGA

Quando è stato richiesto uno pseudo-terminale, sshsupporta una serie di funzioni attraverso l'uso di un carattere di escape.

Un singolo carattere tilde può essere inviato come ~~o facendo seguire alla tilde un carattere diverso da quelli descritti di seguito. Il carattere escape deve sempre seguire una nuova riga per essere interpretato come speciale. Il carattere di escape può essere modificato nei file di configurazione utilizzando la EscapeChardirettiva di configurazione o sulla riga di comando tramite l' -eopzione.

Gli escape supportati (assumendo il default ~) sono:

[…]

~^Z
Sfondo ssh.

[…]

~C
Apri riga di comando. […] !commandconsente all'utente di eseguire un comando locale se l' PermitLocalCommandopzione è abilitata in ssh_config(5). L'aiuto di base è disponibile, utilizzando l' -hopzione.

[…]

Supponendo che tutti i client SSH incatenati lo supportino e supponendo che siano stati richiesti pseudo-terminali, puoi stabilire il numero di connessioni osservando quanti caratteri tilde vengono "consumati" prima che la tilde effettiva appaia nella riga di comando corrente. Ricorda che la tilde deve sempre seguire una nuova riga per essere interpretata come speciale. I miei test mostrano che ogni connessione consuma un carattere di escape.

Ad esempio, se dopo Enterdevi inviare ~quattro volte per ottenerne uno ~sullo schermo, significa che ci sono tre connessioni concatenate.

Puoi farne uno sfondo inviando Enter, un rispettivo numero di ~e poi Ctrl+ Z. Questo ti collocherà nella rispettiva shell dove puoi indagare da dove vieni ( env | grep ^SSH_), dove ti trovi ( uname -a, hostname, ...), qual è il comando in background ( jobs). Corri fgper ripristinare la connessione. Quello che puoi fare dipende dalla shell e da come hai eseguito il rispettivo ssh, non elaborerò.

Sarebbe bello se ci fosse una funzione di escape che sshsi fa stampare le informazioni di base sulla connessione (simile a ~#). Sembra che non ci sia tale funzionalità (ancora).

Con ~C( Cqui significa C maiuscola, Shift+ C) e !commandpotresti essere in grado di indagare senza mandare nessuno sshin secondo piano. Si noti che il valore predefinito di PermitLocalCommandè no. AFAIK non puoi cambiarlo dopo che la connessione è stata stabilita, quindi pensa al futuro.