GNU/Linux >> Linux Esercitazione >  >> Linux

Devo reimpostare Env Vars in Tmux quando ricollego?

Lavoro principalmente su un mac e mi collego ssh/tmux a una macchina Linux per fare il mio lavoro. Ho ssh-agent in esecuzione sulla macchina Linux. Ho

set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"

nel mio .tmux.conf . Tuttavia, ogni volta che mi ricollego a questa sessione, devo correre

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

affinché le nuove finestre di tmux abbiano $SSH_AUTH_SOCK impostato correttamente. Preferirei non doverlo fare. Qualche idea?

Aggiorna

Penso di non essermi spiegato bene. Ecco la mia funzione shell per aprire una shell su una macchina remota:

sshh () {
    tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}

Quando tmux esegue questo comando ssh, $SSH_AUTH_SOCK è non impostato, anche se lo è ambientato nel mio ambiente locale. Se lo metto nell'ambiente di tmux con setenv comando sopra, tutto funziona bene. La mia domanda è:perché devo eseguire il comando setenv?

Aggiornamento 2

Maggiori informazioni:

Quando mi allego a una sessione esistente, $SSH_AUTH_SOCK non è impostato nell'ambiente tmux (o nell'ambiente globale).

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

Se l'ho impostato manualmente, le cose funzionano:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

Se distacco e ricollego, $SSH_AUTH_SOCK torna a non essere impostato.

Risposta accettata:

Dal momento che ho ricevuto il Bounty, ripubblicherò il mio commento chiave per completezza e per evitare di indirizzare i visitatori con lo stesso problema sulla strada sbagliata:

Tmux rimuoverà le variabili d'ambiente

La pagina man di Tmux afferma che update-environment rimuoverà le variabili "che non esistono nell'ambiente di origine […] come se -r fosse stato dato al comando set-environment".

Apparentemente questo è ciò che ha causato il problema. Vedi la risposta di Chris di seguito. Tuttavia, non riesco ancora a immaginare come la variabile possa essere assente nell '"ambiente di origine" e tuttavia essere valida nella finestra tmux appena creata...

Risposta precedente:

Come funziona l'inoltro SSH

Sulla macchina remota, dai un'occhiata all'ambiente della tua shell dopo aver stabilito la connessione SSH:

[email protected]:~$ env | grep SSH
SSH_CLIENT=68.38.123.35 45926 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=68.38.123.35 48926 10.1.35.23 22
SSH_AUTH_SOCK=/tmp/ssh-hRNwjA1342/agent.1342

Quello importante qui è SSH_AUTH_SOCK che è attualmente impostato su un file in /tmp. Se esamini questo file, vedrai che è un socket di dominio Unix ed è connesso alla particolare istanza di ssh a cui ti sei connesso. È importante sottolineare che questo cambia ogni volta che ti connetti.

Non appena ci si disconnette, quel particolare file socket scompare. Ora, se vai e ricolleghi la tua sessione tmux, vedrai il problema. Ha l'ambiente di quando tmux è stato originariamente lanciato, che potrebbe essere stato settimane fa. Quella presa in particolare è morta da tempo.

Correlati:test della shell se la stringa di più righe contiene il modello specificato nell'ultima riga?

Soluzione

Poiché sappiamo che il problema ha a che fare con il sapere dove si trova il socket di autenticazione SSH attualmente attivo, mettiamolo in un posto prevedibile!

Nel tuo file .bashrc o .zshrc sul computer remoto, aggiungi quanto segue:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    rm -f /tmp/ssh-agent-$USER-screen
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

Non penso che tu debba nemmeno inserire un "comando update-environment" nel tuo tmux.conf. Secondo la pagina man, SSH_AUTH_SOCK è già coperto per impostazione predefinita.

Credito

La mia risposta è un estratto di questo post del blog di Mark 'xb95' Smith che spiega lo stesso problema per lo schermo.


Linux
  1. Quando usare Nohup?

  2. Come configurare Bashrc per chiudere tutte le sessioni di Tmux quando chiudo il terminale?

  3. Quando si utilizza Putty, Alt-sinistra/destra è diverso quando Byobu viene avviato automaticamente dal profilo?

  4. Come caricare Ubuntu quando tutto ciò che ho è Grub?

  5. Come posso analizzare l'output del comando find quando i nomi dei file contengono spazi?

Avvio automatico della sessione Tmux sul sistema remoto quando si accede tramite SSH

Come installare tmux su Linux

Come installare VIM su Linux quando non ho i permessi di root?

Leggero ritardo quando si cambia modalità in vim usando tmux o screen

Perché non ho l'evidenziazione della sintassi quando sudo vi <filename>?

Per quanto tempo devono uscire i demoni quando viene ricevuto il segnale di spegnimento del server?