PHP shell_exec O ssh-add ssh-agent não pôde abrir a conexão com o 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 se conectar ao agente de autenticação. A primeira linha exibe com sucesso o ID do agente.

Alguma idéia de como e como resolver esse problema?

    
por user3226932 28.04.2017 / 10:32

1 resposta

1

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 desse eval , mas é essencial no segundo:

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