come sapere se sei in un ssh nidificato?
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
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,
ssh
supporta 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 laEscapeChar
direttiva di configurazione o sulla riga di comando tramite l'-e
opzione.Gli escape supportati (assumendo il default
~
) sono:[…]
~^Z
Sfondossh
.[…]
~C
Apri riga di comando. […]!command
consente all'utente di eseguire un comando locale se l'PermitLocalCommand
opzione è abilitata inssh_config(5)
. L'aiuto di base è disponibile, utilizzando l'-h
opzione.[…]
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 fg
per 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 ssh
si fa stampare le informazioni di base sulla connessione (simile a ~#
). Sembra che non ci sia tale funzionalità (ancora).
Con ~C
( C
qui significa C maiuscola, Shift+ C) e !command
potresti essere in grado di indagare senza mandare nessuno ssh
in 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.