Come rilevare quando una shell appartiene a una sessione SSH remota?


9

La mia domanda è simile a questa , ma sto cercando qualcosa di leggermente diverso. Ho un PC notebook che utilizzo per accedere a macchine Linux su una rete in due diversi scenari:

  • Ho una connessione diretta, cablata alla rete.

  • Ho una connessione indiretta alla rete. C'è una macchina gateway sulla rete esposta a Internet, che posso usare per stabilire tunnel SSH per gli host sulla rete. Questa è ovviamente una connessione molto più lenta, a latenza più elevata.

La mia home directory è accessibile in rete da tutte le macchine, quindi condividono una mia copia .bashrc. Vorrei aggiungere funzionalità per .bashrcrilevare in quale dei due scenari mi trovo e agire di conseguenza (tecnicamente, ci sarebbero tre scenari, in cui il terzo è che sto accedendo al mio computer locale, ma che dovrebbe essere facilmente gestito ). Vorrei fare cose come:

  • alias ssh ssh -X quando sono sulla rete locale, ma non voglio usare l'inoltro X su Internet.

  • export EDITOR=gvimquando sono sulla rete locale, ma export EDITOR=vimquando sono remoto.

E così via. Sulla base della risposta precedente, sembra che dovrei essere in grado di realizzare qualcosa del genere controllando il contenuto di SSH_CLIENT(se esiste) e vedendo se l'indirizzo IP del client corrisponde a uno degli adattatori di rete sul mio computer locale. Ho pensato di vedere se esiste un modo più efficace o più efficace per farlo.

Risposte:


10

Per rilevare una sessione SSH, utilizzare $SSH_CLIENT.

Per distinguere tra sessioni locali e remote, ci sono due possibili approcci: lato client o lato server. Sul lato server, confrontare $SSH_CLIENTcon l'indirizzo IP locale o la tabella di routing; questo di solito ti dirà se la connessione proviene dalla LAN. Sul lato client, è possibile che si desideri inserire le ForwardX11impostazioni in ~/.ssh/config: impostarlo su yesper gli host LAN e su noper gli host WAN. Ciò implica avere una diversa ~/.ssh/configsu siti diversi; questo è quello che faccio, e genera il mio con uno script di shell.

Se l'inoltro X11 è attivato per le connessioni LAN e disattivato per le connessioni WAN, è possibile impostare il proprio editor preferito da tenere $DISPLAYin considerazione.

Le impostazioni sul lato server andrebbero normalmente nel tuo .profile(o .bash_profilese la tua shell di login è bash e tu usi .bash_profile, o .zprofilese la tua shell di login è zsh).

case ${SSH_CLIENT%% *}//$(/sbin/ifconfig |
                          sed -n 's/^.* addr:\([0-9][0-9.]*\) .*/\1/p' |
                          tr '\n' /)/ in
  "") :;;# local session
  10.42.*/10.42.*) :;; # LAN session
  1.2.3.*/1.2.3.*) :;; # LAN session
  *) unset DISPLAY;; # WAN session
esac
export EDITOR=vim
if [ -n "$DISPLAY" ] && type gvim >/dev/null 2>/dev/null; then
  EDITOR=gvim
fi
export VISUAL="$EDITOR"

acceso per LAN e spento per LAN? Il secondo dovrebbe leggere WAN - ma quella è una modifica a carattere singolo ...
Nils,
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.