GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Müssen Env Vars in Tmux zurückgesetzt werden, wenn ich neu anhänge?

Ich arbeite hauptsächlich auf einem Mac und ssh/tmux hänge mich an einen Linux-Rechner an, um meine Arbeit zu erledigen. Ich habe ssh-agent auf dem Linux-Rechner ausgeführt. Ich habe

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

in meiner .tmux.conf . Immer wenn ich mich jedoch wieder an diese Sitzung anhänge, muss ich rennen

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

damit neue tmux-Fenster $SSH_AUTH_SOCK haben richtig einstellen. Ich würde es vorziehen, dies nicht tun zu müssen. Irgendwelche Ideen?

Aktualisieren

Ich glaube, ich erkläre das nicht gut. Hier ist meine Shell-Funktion, um eine Shell auf einem entfernten Rechner zu öffnen:

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

Wenn tmux diesen ssh-Befehl ausführt, $SSH_AUTH_SOCK ist nicht gesetzt, obwohl es ist in meiner lokalen Umgebung eingestellt. Wenn ich dies in die Umgebung von tmux mit der setenv Befehl oben, alles funktioniert gut. Meine Frage ist, warum muss ich den Befehl setenv überhaupt ausführen?

Aktualisierung 2

Weitere Informationen:

Wenn ich an eine bestehende Sitzung anhänge, $SSH_AUTH_SOCK ist nicht in der tmux-Umgebung (oder globalen Umgebung) festgelegt.

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

Wenn ich es manuell einstelle, funktionieren die Dinge:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

Wenn ich abtrenne und wieder anhänge, $SSH_AUTH_SOCK wird wieder nicht gesetzt.

Akzeptierte Antwort:

Da ich die Prämie erhalten habe, poste ich meinen Schlüsselkommentar der Vollständigkeit halber erneut – und um Besucher mit demselben Problem nicht auf die falsche Spur zu bringen:

Tmux entfernt Umgebungsvariablen

Die Manpage von Tmux besagt, dass update-environment Variablen entfernt, „die in der Quellumgebung nicht existieren […], als ob -r an den Befehl set-environment übergeben wurde“.

Anscheinend hat das das Problem verursacht. Siehe die Antwort von Chris unten. Ich kann mir jedoch immer noch nicht vorstellen, wie die Variable in der „Quellumgebung“ fehlen und dennoch im neu erstellten tmux-Fenster gültig sein könnte…

Vorherige Antwort:

So funktioniert die SSH-Weiterleitung

Sehen Sie sich auf dem Remote-Rechner die Umgebung Ihrer Shell an, nachdem Sie die SSH-Verbindung hergestellt haben:

[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

Der wichtige hier ist SSH_AUTH_SOCK, der derzeit auf eine Datei in /tmp eingestellt ist. Wenn Sie diese Datei untersuchen, werden Sie feststellen, dass es sich um einen Unix-Domain-Socket handelt – und mit der bestimmten Instanz von ssh verbunden ist, mit der Sie sich verbunden haben. Wichtig ist, dass sich dies jedes Mal ändert, wenn Sie eine Verbindung herstellen.

Sobald Sie sich abmelden, ist diese bestimmte Socket-Datei verschwunden. Wenn Sie jetzt Ihre tmux-Sitzung erneut anhängen, werden Sie das Problem sehen. Es hat die Umgebung aus der Zeit, als tmux ursprünglich gestartet wurde – was vor Wochen hätte sein können. Dieser spezielle Socket ist schon lange tot.

Verwandt:Shell-Test, ob eine mehrzeilige Zeichenfolge in der letzten Zeile ein bestimmtes Muster enthält?

Lösung

Da wir wissen, dass das Problem damit zu tun hat, zu wissen, wo sich der derzeit aktive SSH-Authentifizierungs-Socket befindet, platzieren wir ihn einfach an einer vorhersehbaren Stelle!

Fügen Sie in Ihrer .bashrc- oder .zshrc-Datei auf dem Remote-Computer Folgendes hinzu:

# 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

Ich glaube nicht, dass Sie in Ihre tmux.conf einen ‚update-environment command‘ einfügen müssen. Laut Manpage ist SSH_AUTH_SOCK bereits standardmäßig abgedeckt.

Kredit

Meine Antwort ist ein Auszug aus diesem Blogbeitrag von Mark „xb95“ Smith, der das gleiche Problem für den Bildschirm erklärt.


Linux
  1. Haben wir ein Undo in Linux?

  2. Env Vars in /etc/environment nicht global sichtbar?

  3. Wann verwendet man Nohup?

  4. Wie führe ich ein Äquivalent von "head -z" aus, wenn ich die Option "-z" nicht zur Verfügung habe?

  5. Wie konfiguriere ich Bashrc so, dass alle Tmux-Sitzungen geschlossen werden, wenn ich das Terminal schließe?

Tmux-Sitzung auf Remote-System automatisch starten, wenn Sie sich über SSH anmelden

So installieren Sie tmux unter Linux

Tmux-Socket-API?

Bei Verwendung von Putty ist Alt-Links/Rechts anders, wenn Byobu automatisch aus dem Profil gestartet wird?

Leichte Verzögerung beim Umschalten des Modus in vim mit tmux oder screen

Warum habe ich keine Syntaxhervorhebung, wenn ich sudo vi <Dateiname> drücke?