Php exec git pull script con ssh no funciona, pero hacerlo manualmente funciona

Estoy tratando de hacer un script donde pueda Git en mi server ubuntu después de enviarlo al repository de Bitbucket. Configuré las keys ssh en Bitbucket y funciona para hacer el command git pull en el repository, pero no funciona cuando lo bash desde php exec.

He probado commands chmod como /.ssh/bitbucket_rsa como 775 y 777 y chown -R www-data: www-data / .ssh sin ningún tipo de suerte.

Respuesta:

array ( 0 => 'Host key verification failed.', 1 => 'fatal: Could not read from remote repository.', 2 => '', 3 => 'Please make sure you have the correct access rights', 4 => 'and the repository exists.', ) 

Código:

  public function gitPull() { try { exec("cd " . env("REPO_PATH") . " && git pull 2>&1", $output); Log::info($output); } catch (\Exception $e) { Log::error($e); } http_response_code(200); } 

Supongo que está atascado con el hecho de que el usuario www-data no puede establecer la connection SSH con el server git. Creo que lo más simple fue crear un directory de inicio para el usuario de www-data y crear un directory .ssh con los permissions adecuados, un file de configuration y el file de key allí. Siempre puedes probar la configuration como root con

 # su - www-data $ cd <to your repository> $ git pull 

Busca "conexiones SSH sin contraseña" para configurarlo correctamente. Y también tenga en count que SSH se niega a usar un file de key si los permissions se pierden.

 Host key verification failed. 

significa que ssh no pudo verificar la key de host, muy probablemente porque no hay known_hosts file de known_hosts en el directory home / .ssh de www-data que contiene la key de host esperada para el server de su repository.

Hay al less dos forms de arreglar eso:

  • Use ssh-keyscan como se describe en Serverfault.se :

     ssh-keyscan -H [hostname] >> /path/to/www-data's_home_directory/.ssh/known_hosts 

    Solo debe hacer eso una vez (a less que la key cambie), pero debe verificar que la key sea realmente correcta después de ejecutar ssh-keyscan .

  • Establezca la variable de entorno GIT_SSH_COMMAND antes de ejecutar git . Puedes usar esto para que ssh use un file diferente de known_hosts :

     export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/path/to/known_hosts" 

    Tenga en count que lo anterior asume la syntax del shell (por ejemplo, Bash), es posible que tenga que ajustar para PHP, en particular la parte export GIT_SSH_COMMAND= .