Wie kann ich einen bereits weitergeleiteten SSH-Schlüssel an tmux weiterleiten?

15

Ich verbinde mich über SSH von einem Computer aus, auf dem meine Schlüssel gespeichert sind, leite sie an einen zweiten Computer weiter und versuche dann, die Schlüssel in tmux zu verwenden. Ich scheine die Weiterleitung beim Betreten von tmux "zu verlieren". Wie kann ich "wieder weiterleiten", damit ich meine Schlüssel innerhalb von tmux verwenden kann?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)
user50849
quelle
Ich bestätige, dass es funktioniert, wenn Sie einen Agenten starten, der für alle Ihre Sitzungen freigegeben ist. In der Dokumentation unter bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > ssh-agent-Prozess konfigurieren wird eine Methode zum Erreichen dieses Ergebnisses erläutert.
Dereckson

Antworten:

12

Wenn Sie eine bereits vorhandene tmux-Sitzung anhängen, erbt die Shell die Umgebungsvariablen nicht von Ihrer Anmeldeshell. Insbesondere werden die Umgebungsvariablen des ssh-Agenten nicht übernommen.

Versuchen Sie dieses Update :

  1. Erstellen Sie dieses Skript und speichern Sie es in $ HOME / .ssh / saveagent

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. Fügen Sie es Ihrem Shell-Startskript hinzu. Zum Beispiel, wenn Sie bash verwenden:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Nachdem Sie den tmux angeschlossen haben, führen Sie ihn aus . $HOME/.ssh/latestagent

Siehe auch Wie kann ich ein Skript sofort nach dem Herstellen einer Verbindung über SSH ausführen? und An tmux-Sitzung anhängen und einen Befehl ausführen

GnP
quelle
1
Senden Sie es möglicherweise an .profile, wenn Sie versuchen, mit anderen Shells kompatibel zu sein.
Dereckson
2
Gute Antwort! Ein paar Fragen , die ich lief in: a - ein Teil der Umgebungsvariablen Leerzeichen enthalten, so dass die Zeile vor dem letzten im saveagentSkript sein sollte: echo "export $var=\"$(eval echo '$'$var)\"". b - Das latestagentSkript sollte statt mit aufgerufen sourcewerden sh, so dass sich das Setzen der Variablen auf die aufrufende Shell auswirkt. Der latestagentautomatische Aufruf des Skripts beim Anhängen von tmux kann über die hier beschriebene Methode erfolgen: unix.stackexchange.com/questions/86925/…
Joe,
Danke @Joe, ich habe meine Antwort geändert, um deine Verbesserungen einzubeziehen.
GnP
0

Sofern Sie kein Skript erstellen möchten, das alle Variablen enthält, die in jeder Shell benötigt werden, die Sie in einer neuen Shell, die von denselben tmuxServersitzungen erzeugt wurde, weiter erzeugen, möchten Sie tmuxdie Variablen wahrscheinlich mit dem set-environmentBefehl in die Sitzung oder globale Umgebungen einfügen. Zum Beispiel so (für bash):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

Denken Sie daran, das -gFlag hinzuzufügen, wenn Sie es auch in anderen Sitzungen verwenden möchten, und es zu verwenden, -t <session>wenn Sie es von außerhalb von ausführen tmux.

peterph
quelle
0

Nachdem ich die anderen Antworten hier gelesen hatte, entschloss ich mich, mein öffentliches / privates Schlüsselpaar auf den Remote-Server zu kopieren, damit ich mich nicht mehr um die Weiterleitung von Agenten kümmern musste.

M. Scott Ford
quelle