Kann ich die SSH-Schlüsselweiterleitung über eine getrennte Bildschirmsitzung erneut anhängen? [Duplikat]

7

Mögliches Duplikat:
ssh-agent key timeout mit screen oder tmux auf dem bastion host

Ich habe einen Laptop, auf dem Pageant (der PuTTy SSH-Schlüsselagent) ausgeführt wird. Wenn ich zu einem System ssh und den Bildschirm starte, funktioniert die ssh-Schlüsselweiterleitung ordnungsgemäß.

Wenn ich jedoch die Verbindung zu dieser Bildschirmsitzung trenne, mich abmelde und später wieder herstelle, funktioniert die Schlüsselweiterleitung nicht mehr. Ich gehe davon aus, dass dies daran liegt, dass beim erneuten Verbinden die Schlüsselweiterleitung für die neue SSH-Sitzung auf anderen Ports eingerichtet wird als für die alte.

Gibt es eine Möglichkeit, einem einzelnen Bildschirmfenster beizubringen, sich wieder mit der Agentenweiterleitung zu verbinden, damit ich mit meinem Schlüssel erneut weiterleiten kann?

David Mackintosh
quelle

Antworten:

6

Meine Lösung ist etwas robuster. Fügen Sie dies in Ihr .bash_profile auf der Remote-Seite ein.

if [ -z "${STY}" -a -t 0 ]; then
    reattach () {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-screen"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-screen" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
fi

Dann benutze ich reattachstatt screen. Dies könnte mit command screen -A ${1:+"$@"}und 'screen' anstelle von 'reattach' geschehen .

Das Problem bei der Verwendung der 'Alias'-Lösung in der Antwort von @David Mackintosh ist, dass die auf dem Bildschirm ausgeführten Prozesse jetzt auf der Remote-Seite denselben SSH_AUTH_SOCK-Wert haben. Denken Sie an das folgende Szenario.

  • local: Startet den SSH-Agenten, der den SSH_AUTH_SOCKWert erhält
  • local: SSH zu remote, neuen SSH_AUTH_SOCKWert auf remote setzen
  • remote: starte screenoder tmuxbenutze SSH_AUTH_SOCK
  • remote: Erstellt eine Shell, von der SSH_AUTH_SOCK geerbt wird screen
  • Remote: Trennen Sie sich vom Bildschirm und melden Sie sich ab
  • local: SSH zu remote, neuen SSH_AUTH_SOCK Wert auf remote setzen
  • remote: Verbinde die Sitzung erneut mit dem Bildschirm, der immer noch den alten SSH_AUTH_SOCK Wert hat

Der Trick besteht darin, die Prozesse innerhalb des Bildschirms zum Ausführen zu bringen, um den neuen Wert zu verwenden. Sie können dies tun, indem Sie bei SSH_AUTH_SOCKjedem Anruf einen Symlink auf den aktuellen setzen screen(für eine neue oder neu angefügte Sitzung).

Arcege
quelle
2

Dies ist eigentlich ein Duplikat von: ssh-agent key timeout mit screen oder tmux auf bastion host

Die Lösung:

  • Fügen Sie Ihrem .bash_profil hinzu:

    echo "exportiere SSH_AUTH_SOCK = $ SSH_AUTH_SOCK"> ~ / .ssh / auth_sock

  • Fügen Sie Ihrer .bashrc hinzu:

    alias ssh = "source ~ / .ssh / auth_sock; ssh"

Dies scheint soweit für mich zu funktionieren.

David Mackintosh
quelle
Ich habe die Antwort auf die Frage geschrieben, mit der Sie verbunden sind. Schön zu hören, dass es bei Ihnen funktioniert. Ich hatte es nicht getestet und war mir nicht sicher, ob es vollständig genug war! :)
Chepner