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-agent
und 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 braucheneval
, 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');