GNU/Linux >> Tutoriels Linux >  >> Linux

Dois-je réinitialiser Env Vars dans Tmux lorsque je me rattache ?

Je travaille principalement sur un mac et ssh/tmux attaché à une machine Linux pour faire mon travail. J'ai ssh-agent en cours d'exécution sur la machine Linux. j'ai

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

dans mon .tmux.conf . Pourtant, chaque fois que je me rattache à cette session, je dois courir

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

pour que les nouvelles fenêtres tmux aient $SSH_AUTH_SOCK régler correctement. Je préférerais ne pas avoir à le faire. Des idées ?

Mettre à jour

Je pense que je n'explique pas bien cela. Voici ma fonction shell pour ouvrir un shell sur une machine distante :

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

Lorsque tmux exécute cette commande ssh, $SSH_AUTH_SOCK n'est pas défini, même s'il est installé dans mon environnement local. Si je mets cela dans l'environnement de tmux avec le setenv commande ci-dessus, tout fonctionne bien. Ma question est la suivante :pourquoi dois-je exécuter la commande setenv ?

Mise à jour 2

Plus d'informations :

Lorsque je m'attache à une session existante, $SSH_AUTH_SOCK n'est pas défini dans l'environnement tmux (ou environnement global).

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

Si je le configure manuellement, les choses fonctionnent :

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

Si je détache et rattache, $SSH_AUTH_SOCK redevient non défini.

Réponse acceptée :

Depuis que j'ai reçu le Bounty, je republierai mon commentaire clé par souci d'exhaustivité - et pour éviter de mettre les visiteurs ayant le même problème sur la mauvaise voie :

Tmux supprimera les variables d'environnement

La page de manuel de Tmux indique que update-environment supprimera les variables "qui n'existent pas dans l'environnement source […] comme si -r était donné à la commande set-environment".

Apparemment, c'est ce qui a causé le problème. Voir la réponse de Chris ci-dessous. Cependant, je n'arrive toujours pas à imaginer comment la variable pourrait être absente dans "l'environnement source" et pourtant être valide dans la fenêtre tmux nouvellement créée...

Réponse précédente :

Fonctionnement du transfert SSH

Sur la machine distante, jetez un œil à l'environnement de votre shell après avoir établi la connexion 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

L'important ici est SSH_AUTH_SOCK qui est actuellement défini sur un fichier dans /tmp. Si vous examinez ce fichier, vous verrez qu'il s'agit d'un socket de domaine Unix - et qu'il est connecté à l'instance particulière de ssh sur laquelle vous vous êtes connecté. Surtout, cela change à chaque fois que vous vous connectez.

Dès que vous vous déconnectez, ce fichier de socket particulier a disparu. Maintenant, si vous allez et rattachez votre session tmux, vous verrez le problème. Il a l'environnement du lancement initial de tmux - ce qui aurait pu être il y a des semaines. Cette prise particulière est morte depuis longtemps.

Connexe:shell teste si la chaîne de plusieurs lignes contient le motif spécifié dans la dernière ligne?

Solution

Puisque nous savons que le problème est de savoir où se trouve le socket d'authentification SSH actuellement actif, plaçons-le simplement dans un endroit prévisible !

Dans votre fichier .bashrc ou .zshrc sur la machine distante, ajoutez ce qui suit :

# 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

Je ne pense même pas que vous deviez mettre une "commande update-environment" dans votre tmux.conf. Selon la page de manuel, SSH_AUTH_SOCK est déjà couvert par défaut.

Crédit

Ma réponse est un extrait de cet article de blog de Mark "xb95" Smith qui explique le même problème pour l'écran.


Linux
  1. Env ou pas env ?

  2. API de socket Tmux ?

  3. Lors de l'utilisation de Putty, Alt-gauche/droite est différent lorsque Byobu est démarré automatiquement à partir du profil ?

  4. Empêcher la fermeture du volet/fenêtre à la fin de la commande - Tmux ?

  5. Comment installer VIM sur Linux lorsque je n'ai pas les droits root ?

Démarrage automatique de la session Tmux sur le système distant lors de la connexion via SSH

Comment installer tmux sous Linux

Comment configurer Bashrc pour fermer toutes les sessions Tmux lorsque je ferme le terminal ?

Ssh-agent n'est pas configuré (ssh_auth_sock, Ssh_agent_pid Env Vars Not Set) ?

Comment charger Ubuntu quand tout ce que j'ai est Grub ?

Léger retard lors du changement de mode dans vim en utilisant tmux ou screen