PHP shell_exec ssh-add ssh-agent não pôde abrir a conexão ao agente de autenticação

1

eu fiz isso

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

e ainda recebendo erro ao conectar-se ao agente de autenticação. A primeira linha exibe com sucesso o ID do agente.

Alguma idéia por que e como resolver esse problema?

user3226932
fonte

Respostas:

1

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');
    
Jakuje
fonte