Direkt zum Inhalt | Direkt zur Navigation

Sektionen

Focus on your applications!

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Support / Häufig gestellte Fragen / Wie kann ich SSH Agent-Forwarding für git verwenden?

Wie kann ich SSH Agent-Forwarding für git verwenden?

erstellt von Veit Schiele zuletzt verändert: 14.08.2016 15:33
SSH Agent-Forwarding kann verwendet werden um Daten einfach auf einem Server zu deployen. Es ermöglicht Ihnen, Ihren lokalen SSH-Schlüssel anstelle Schlüssel auf entfernten Servern zu hinterlegen.

Wenn Sie bereits SSH-Schlüssel zur Interaktion mit Git verwenden, kennen Sie wahrscheinlich bereits ssh-agent. Es handelt sich um ein Programm, das im Hintergrund läuft und Ihre Schlüssel immer wieder in den Speicher lädt, so dass Sie Ihre Passphrase nicht jedesmal wieder neue eingeben müssen sobald Sie den Schlüssel verwenden wollen. Das nette ist, dass Sie Servern Zugriff auf Ihren lokalen ssh-agent gewähren können.

Einrichten von SSH Agent-Forwarding

Stellen Sie sicher, dass Sie Ihren eigene SSH-Schlüssel eingerichtet haben. Sie können mit unserer Anleitung Wie generiere ich einen SSH-Schlüssel? einen solchen generieren wenn Sie dies nicht bereits gemacht haben. Das lokale Schlüsselpaar können Sie einfach im Terminal testen mit:

$ ssh -T NAME@MYCOMPANY.cusy.io -p PORT

Note

Gitblit ist via SSH nur über nicht-privilegierte Ports erreichbar da für SSH im Gegensatz zu HTTPS kein Virtual Host eingerichtet werden kann. Daher identifizieren wir über die SSH-Portnummern, welche Gitblit-Installation angesprochen werden soll.

Wir sind nun auf einem guten Weg. Nun können wir SSH einrichten um Agent- Forwarding auf dem Server zu ermöglichen. Hierzu tragen wir in ~/.ssh/config folgendes ein:

host MYCOMPANY.cusy.io
    ForwardAgent yes

Warning

Sie könnten versucht sein, einen Platzhalter wie * für den Host zu verwenden. Dies ist jedoch keine gute Idee, da Sie Ihren lokalen SSH-Schlüssel dann mit allen anderen Servern, mit denen Sie per SSH kommunizieren, austauschen würden. Die anderen Server hätten zwar keinen direkten Zugriff auf den Schlüssel, jedoch wären sie in der Lage, diesen zu nutzen solange die Verbindung besteht. Daher sollten Sie nur diesen speziellen Server hinzufügen.

SSH Agent-Forwarding testen

Um zu testen, ob das Agent-Forwarding mit dem Git-Server funktioniert, können Sie im Terminal folgendes eingeben:

$ ssh -T NAME@MYCOMPANY.cusy.io -p PORT

Sie sollten die gleiche Meldung erhalten, wie vorher beschrieben.

Alternativ können Sie auch überprüfen, ob Ihr Schlüssel auf dem Server verwendet wird indem Sie inspizieren, ob die SSH_AUTH_SOCK- Variable gesetzt ist:

$ echo "$SSH_AUTH_SOCK"
/tmp/ssh-8SkgGv9Br2/agent.7816

Wenn die Variable nicht gesetzt ist, funktioniert das Agent-Forwarding noch nicht.

Fehlerbehebung

Folgende Punkte können Sie überprüfen um herauszufinden, wo der mögliche Fehler zu finden ist:

  1. Verwenden Sie eine SSH-Url um IhrenCode auszuchecken?

    SSH-Forwarding funktioniert nur mit SSH URLs, nicht HTTPS-URLs. Überprüfen Sie die Datei MYREPOSITORY/.git/config auf Ihrem Server und gewährleisten Sie, dass dort eine SSH-URL ähnlich der folgenden eingetragen ist:

    [remote "origin"]
        url = MYNAME@MYCOMPANY.cusy.io:PORT/MYPROJECT.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  2. Arbeitet Ihr SSH-Schlüssel lokal?

    Bevor Ihr Schlüssel mit Agent-Forwarding arbeiten kann, muss er zunächst lokal funktionieren. Schauen Sie sich hierzu unsere Anleitung Wie generiere ich einen SSH-Schlüssel? an.

  3. Ermöglicht Ihr System SSH Agent-Forwarding?

    Manchmal lässt eine Systemkonfiguration SSH Agent-Forwarding nicht zu. Sie können dies überprüfen mit folgendem Befehl:

    $ ssh -v example.com
    OpenSSH_6.9p1, LibreSSL 2.1.8
    debug1: Reading configuration data /Users/ME/.ssh/config
    debug1: /Users/ME/.ssh/config line 1: Applying options for *
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: /etc/ssh/ssh_config line 21: Applying options for *
    …
    

    IM obigen Beispiel wird die Datei ~/.ssh/config und dann erst /etc/ssh/ssh_config. Um zu überprüfen, ob diese Datei unsere Angaben überschrieben hat, geben wir den folgenden Befehl ein:

    $ cat /etc/ssh/ssh_config
    …
    Host *
      SendEnv LANG LC_*
      ForwardAgent no
    

    In diesem Beispiel wird wird durch die /etc/ssh/ssh_config-Datei explizit ForwardAgent no angegeben. Löschen Sie diese Zeile, so sollte SSH Forward-Agent wieder möglich sein.

  4. Lässt Ihr Server SSH Agent-Forwarding für eingehende Verbindungen zu?

    Agent-Forwarding kann auch auf dem Server blockiert werden. Sie können überprüfen, ob Agent-Forwarding erlaubt ist, indem Sie sich per ssh mit dem Server verbinden und anschließend folgenden Befehl eingeben:

    $ cat /etc/ssh/sshd_config
    …
    AllowAgentForwarding yes
    
  5. Läuft Ihr lokaler ssh-agent?

    Auf den meisten Computern startet das Betriebssystem automatisch den ssh-agent.

    Note

    Unter Windows müssen Sie dies jedoch manuell tun. Eine Anleitung hierzu finden Sie bei Github: Auto-launching ssh-agent on Git for Windows.

    Um sicherzustellen, dass ssh-agent auf Ihrem Computer ausgeführt wird, geben Sie den folgenden Befehl im Terminal ein:

    $ echo "$SSH_AUTH_SOCK"
    /tmp/ssh-8SkgGv9Br2/agent.7816
    
  6. Ist Ihr Schlüssel für den ssh-agent verfügbar?

    Sie können überprüfen, ob Ihr Schlüssel dem ssh-agent zur Verfügung steht, indem Sie den folgenden Befehl eingeben:

    $ ssh-add -L
    

    Ihr Schlüssel sollte in der ausgegebenen Liste vorhanden sein. Falls nicht, können Sie den Schlüssel hinzufügen mit:

    $ ssh-add MyKey
    

    Note

    Unter Mac OS X vergißt ssh-agent den Schlüssel bei einem Neustart. Sie können ihn jedoch im Programm Schlüsselbundverwaltung speichern mit:

    $ ssh-add -K MyKey