o shell_exec()
função 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 serão perdidas).
Com a segunda invocação, o novo shell é invocado sem as variáveis de ambiente apontando para a execução ssh-agent
e, portanto, não é de admirar 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 semelhante ao anterior, mas passa o ambiente como parte do próximo shell_exec()
, porque na primeira linha, você não precisa disso eval
, mas é essencial no segundo:
$str = shell_exec('$(ssh-agent -s)');
shell_exec('eval "' . $str . '"; ssh-add /opt/.ssh/id_rsa 2>&1');