PHP shell_exec ssh-add ssh-agent konnte keine Verbindung zum Authentifizierungsagenten herstellen

752
user3226932

Ich tat dies

shell_exec('eval "$(ssh-agent -s)" 2>&1'); shell_exec('ssh-add /opt/.ssh/id_rsa 2>&1'); 

und immer noch Fehler beim Herstellen der Verbindung zum Authentifizierungsagenten. Die erste Zeile gibt die Agenten-ID erfolgreich aus.

Irgendwelche Ideen warum und wie man dieses Problem löst?

1

1 Antwort auf die Frage

1
Jakuje

Die shell_exec()Funktion führt Ihre Befehle in einer Shell aus, und nachdem sie beendet ist, endet auch die Shell (daher gehen auch alle Umgebungsvariablen verloren).

Beim zweiten Aufruf wird eine neue Shell aufgerufen, ohne dass die Umgebungsvariablen auf die Ausführung verweisen, ssh-agentund daher ist es kein Wunder, dass sie fehlschlägt.

Es gibt verschiedene Möglichkeiten, wie Sie das beheben können:

  • Am einfachsten ist es, beide Befehle in einer einzigen Shell auszuführen:

    shell_exec('eval "$(ssh-agent -s)" 2>&1 && ssh-add /opt/.ssh/id_rsa 2>&1'); 
  • Die andere besteht darin, die Umgebungsvariablen direkt in PHP zu parsen, sie in die Umgebung Ihres Skripts zu setzen, damit sie an die nächste Shell (hoffentlich) übergeben werden.

  • Der letzte macht etwas Ähnliches wie der vorherige, übergibt aber die Umgebung als Teil des nächsten shell_exec(), da Sie das in der ersten Zeile nicht brauchen eval, aber in der zweiten ist es wesentlich:

    $str = shell_exec('$(ssh-agent -s)'); shell_exec('eval "' . $str . '"; ssh-add /opt/.ssh/id_rsa 2>&1');