A função shell_exec()
executa seus comandos em um shell e depois que eles terminam, o shell termina também (portanto, também todas as variáveis de ambiente vai se perder).
Com a segunda invocação, o novo shell é invocado sem as variáveis de ambiente que apontam para o ssh-agent
em execução e, portanto, não é surpresa que ele falhe.
Existem várias possibilidades de como resolver isso:
-
O mais fácil é executar os dois comandos em um único shell:
shell_exec('eval "$(ssh-agent -s)" 2>&1 && ssh-add /opt/.ssh/id_rsa 2>&1');
-
O outro é analisar as variáveis de ambiente diretamente no PHP, configurá-las para o ambiente do seu script para que elas sejam passadas para o próximo shell (esperançosamente).
-
O último faz algo parecido com o anterior, mas passa o ambiente como parte do próximo
shell_exec()
, porque na primeira linha, você não precisa desseeval
, mas é essencial no segundo:$str = shell_exec('$(ssh-agent -s)'); shell_exec('eval "' . $str . '"; ssh-add /opt/.ssh/id_rsa 2>&1');