Estoy tratando de ejecutar git pull en un script php desde un browser, pero obtuve "sh: connect to host git.assembla.com port 22: Permiso denegado"
<?php $output=array(); $returnVar=0; chdir("/var/www/html"); exec('git pull git@git.assembla.com:andrewadel.git master 2>&1', $output , $returnVar); // exec('pwd', $output , $returnVar); echo "<pre>\n"; echo "return status: $returnVar\n\n"; print_r($output); echo "</pre>\n";
bash-4.1$ whoami apache bash-4.1$ php gitsync.php <pre> return status: 0 Array ( [0] => From git.assembla.com:andrewadel [1] => * branch master -> FETCH_HEAD [2] => Already up-to-date. ) </pre>
http://103.7.164.33/gitsync.php?111 return status: 1 Array ( [0] => ssh: connect to host git.assembla.com port 22: Permission denied [1] => fatal: The remote end hung up unexpectedly )
Gracias
Aquí hay muchas variables … pero me enfrenté a un comportamiento bastante exacto con un script cgi remoto en el que estaba trabajando.
En mi caso, el problema estaba relacionado con SELinux en CentOS.
user@remoteserver:~$ getsebool -a | grep httpd
Mostró:
... httpd_can_network_connect --> off ...
Pruebe una posible solución (sudo o run como root):
user@remoteserver:~$ setsebool httpd_can_network_connect=1 //...then initiate your serverside script remotely
Solución permanente (si arriba se ha demostrado que es efectiva):
user@remoteserver:~$ setsebool -P httpd_can_network_connect=1
-P: la opción asegura que el valor boolean de SELinux esté configurado en valor pnetworkingeterminado como reinicio en el futuro. Ver: man getsebool
y man setsebool
¿Suhosin, modo seguro, Apparmor u otros mecanismos de security implementan su server web y su installation de PHP?
Y recomiendo probar enlaces PHP-Git como php-git si estás haciendo más operaciones. Ese module está diseñado para trabajar con Git en código PHP.
Apache ejecutaría el script como el usuario 'nobody'. Su secuencia de commands se basa en tener la key privada almacenada en ~ apache / .ssh / id_rsa
El error es que git no puede acceder a esa key y no puede autenticarse contra el server de git.
La solución es especificar la key correcta para usar y hacer que esa key sea accesible para el usuario que está ejecutando el script.
Lea esto para saber cómo especificar la key:
Especifique la key SSH privada que se utilizará al ejecutar el command del shell con o sin Ruby.
Eche un vistazo aquí para get un enfoque para ejecutar como un usuario diferente:
No recomendaría ejecutar como nadie (desde entonces el usuario nadie tiene acceso a su key privada), o como apache (desde entonces está aumentando el daño que se podría hacer si se encuentra un exploit para su sitio). Por lo tanto, debe crear un usuario diferente con los permissions mínimos para leer su key privada y ejecutar el command git. Puede que no sea necesario especificar la key si solo creas una count de usuario limitada para esto y colocas las keys (públicas / privadas) en ~ / .ssh
¿Esto es un problema de permissions? Se ejecutará un script PHP como el usuario nobody más probable, que puede no tener permissions para ejecutar el command git.