Veit Schiele Communications

Veit Schiele Communications

SSH-Agent-Forwarding

SSH-Agent-Forwarding erlaubt eine Reihe von ssh-Verbindungen, bei der die Abfrage des privaten ssh-Schlüssels zurückverwiesen wird an den ursprünglichen ssh-Agent. Dies vermeidet Passwörter und private Schlüssel auf entfernten Hosts zu hinterlegen.
erstellt von Veit Schielezuletzt verändert: 19.03.2017 21:35 © Veit Schiele Communications GmbH, 2012–2017

Einrichten

Voraussetzung ist die Installation eines öffentlichen Schlüssels auf allen Zielmaschinen.

Anschließend können Sie SSH-Agent-Forwarding mit:

$ ssh -A user@example.com

Soll bei jeder SSH-Verbindung zu diesem Server SSH-Agent-Forwarding verwendet werden, so kann dies auch in der SSH-Konfigurationsdatei ~/.ssh/config angegeben werden:

Host example.com
    ForwardAgent yes

Note

Sie könnten versucht sein, ForwardAgent yes global für alle Hosts zu verwenden. Dies ist jedoch keine wirklich gute Idee da Sie dann Ihre lokalen SSH-Schlüssel mit jedem Server via SSH teilen würden. Diese Schlüssel könnten dann verwendet werden solange die Verbindung hergestellt ist.

Mac OS X

Unter Mac OS X muss ggf. zuvor der ssh-agent gestartet werden:

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

Alternativ können Sie den Schlüssel auch in Keychain verwalten:

$ ssh-add -K ~/.ssh/id_rsa

Fehlerbehebung

  1. Funktionieren Ihre SSH-Schlüssel lokal

    Bevor die Schlüssel mit Agent-Forwarding funktionieren, sollten Sie überprüfen, ob sie lokal funktionieren. Eine Anleitung zum erstellen von SSH-Schlüsseln finden Sie in SSH-Schlüssel erstellen.

  2. Ihr System muss SSH-Agent-Forwarding erlauben

    1. Dies kann überprüft werden mit:

      $ ssh -v example.com
      OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
      debug1: Reading configuration data /Users/you/.ssh/config
      debug1: Applying options for example.com
      debug1: Reading configuration data /etc/ssh_config
      debug1: Applying options for *
      exit
      
    2. Wir können nun überprüfen, ob /etc/ssh_config unsere Angaben überschreibt mit:

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

      In diesem Fall blockiert die Einstellung ForwardAgent no aus /etc/ssh_config das SSH-Agent-Forwarding. Das Auskommentieren dieser Zeile sollte dann SSH-Agent-Forwarding wieder ermöglichen.

  3. Der Server muss SSH-Agent-Forwarding für eingehende Verbindungen erlauben

    Agent-Forwarding kann auch vom Server unterbunden werden. Hierzu verbinden Sie sich per SSH mit dem Server. Anschließend überprüfen Sie in /etc/ssh/ssh_config ob AllowAgentForwarding erlaubt ist.

  4. Der lokale ssh-agent muss laufen

    Auf den meisten Computern startet das System automatisch den ssh-agent. Um zu überprüfen, ob der ssh-agent läuft, kann einfach die SSH_AUTH_SOCK- Variable abgefragt werden:

    $ echo "$SSH_AUTH_SOCK"
    /tmp/ssh-iV46QOWtS5/agent.11925
    

    Falls die SSH_AUTH_SOCK-Variable nicht gesetzt ist, wird auch nichts ausgegeben.

  5. Nutzen Sie SSH-Agent-Forwarding für git, so sollten Sie sicherstellen, dass eine SSH-URL verwendet wird und nicht HTTP(s)

    Überprüfen Sie in .git/config. Die URL sollte ähnlich aussehen wie

[remote "origin"]
  url = git@github.com:my-account/my-repository.git
  fetch = +refs/heads/*:refs/remotes/origin/*
  1. Ihr Schlüssel muss für ssh-agent verfügbar sein

    Dies können Sie überprüfen mit:

    $ ssh-add -l
    

    Falls in der Ausgabe Ihr Schlüssel nicht dabei ist, können Sie ihn hinzufügen, z.B. mit:

    $ ssh-add ~/.ssh/id_rsa
    

    Note

    Falls Sie einen Mac benutzen, beachten Sie bitte die obigen Hinweise unter Mac OS X.