5 votos

Ejecutando git pull de un script php

Yo estaba tratando el Perfecto Flujo de trabajo con Git, GitHub, y SSH, pero parece que no puede ejecutar git pull. He intentado git status y está muy bien.

Cuando me git pull 2>&1 de recibir:

error: no se puede abrir .git/FETCH_HEAD: Permiso denegado

Traté de chmod .git dir a 777 no hubo suerte.

Cuando ejecuto whoami desde el navegador me muestra: apache

--- EDIT ---

Acabo chown apache:apache -R .git y ahora me sale:

No se pudo crear el directorio '/.ssh'. Clave de Host de verificación de error. fatal: El extremo remoto se colgó de forma inesperada

6voto

voretaq7 Puntos 63415

Parece que tienes dos estrechamente relacionados con problemas de:

  1. El usuario de apache se está ejecutando como no se puede escribir en la ubicación normal de su ~/.ssh directorio (porque en CentOS Apache directorio de inicio del es /, y obviamente no queremos que el servidor web sólo poner las cosas donde quiera en el sistema de ficheros).

  2. Github quiere una clave pública para autenticar su identidad.

Existe una solución que debe ser capaz de manejar estas dos casos: git utiliza el GIT_SSH variable de entorno (si está configurado) para determinar qué comando ejecutar como "ssh", por lo que sólo necesita ajustar que la variable de entorno de decirle SSH dos cosas: Dónde buscar su known_hosts archivo, y lo clave pública que se utiliza para la autenticación.

Agregar
export GIT_SSH="ssh -oUserKnownHostsFile=/some/path/to/known_hosts -i /some/path/to/private_key"
para la secuencia de comandos y cosas deberían funcionar bien (obviamente sustituto de una ruta de acceso de Apache puede escribir para el maniquí de caminos en mi ejemplo).

Tenga en cuenta que usted tendrá que conectar con el host remoto una vez como usuario de Apache para crear y llenar el known_hosts archivo. Usted puede hacer que al ejecutar el script desde la línea de comandos y el trato con el interactivo preguntar cuando sale. Si ejecuta la secuencia de comandos en un segundo tiempo, usted no debe tener ningún interactive solicita hacer trato con el.

5voto

Tom Puntos 720

No se pudo crear el directorio '/.ssh'. Clave de Host de verificación de error. fatal: El extremo remoto se colgó de forma inesperada

Leer y considerar su mensaje de error. Las claves de Host se almacenan en el ~/.ssh/known_hosts archivo. Su usuario de Apache tiene "/" como su directorio de inicio, y que sin duda no se y no debe tener acceso de escritura a la root.

Sugiero que usted cree una cuenta de usuario para este... quizá gitpull-user o algo así. Asegúrese de que dispone de un útil directorio de inicio, incluso si se trata de un lugar atípico. Inicio de sesión como ese usuario y crear un script de shell que logra lo que estamos tratando de hacer que el usuario. Por supuesto, también tendrás que copiar el id_rsa clave a la cuenta del usuario, etc.

Configurar sudo para lanzar el script por añadir esta línea a /etc/sudoers

apache ALL = (gitpull-user) NOPASSWD: /path/to/script.sh`

y también si vas a tener "TTY" temas:

Defaults:apache !requiretty

Cambiar el script PHP para llamar a sudo -u gitpull-user ./script.sh


Sería posible cambiar de Apache directorio home "real" ubicación y acaba de soltar la tecla, pero que se exponga a una situación de riesgo cuando sus datos tendría que ser de propiedad de un servidor apache y la clave podría ser de lectura si el demonio estaba comprometida. El establecimiento de un segundo usuario proporciona un nivel de aislamiento.

1voto

devicenull Puntos 4709

Ejecutar:

sudo -u apache ssh YOURGITHOST

Básicamente, el usuario de apache no sabe lo que el control remoto de los servidores SSH clave de host es, y no puede pedirle que acepte. Hay otras maneras de hacer esto, pero este es uno de los que mejor recuerdo.

0voto

Deckard Puntos 121

Yo estaba tratando de tirar de un repositorio de GIT en el uso de exec() en un servidor web PHP script también. El repositorio remoto estaba desprotegido de sólo lectura en un usuario diferente.

Mi principal problema era que cuando se ejecuta el servidor web script PHP EXEC variables de resultado de la atracción estaban completamente vacías, simplemente me di cuenta de que la EXTRACCIÓN no suceda, no hay más mensajes de error, nada. Un simple git 'ayuda' que hizo el trabajo, sin embargo.

Lo que se ha solucionado el problema fue el siguiente:

Primero hago el webserveruser propietario del directorio del repositorio:

chown -R <webserveruser>:<webusergroup> <repodir>

Normalmente no se puede acceder al servidor web del usuario, por lo que tuve asignar un intérprete de primera:

usermod -s /bin/bash <webserveruser>

Inicio de sesión como usuario del servidor de web:

su <webserveruser>

A continuación, cambie a la repodirectory y hacer un manual de extracción :

cd <repodir>
git pull

Salida el webserver de usuario y volver a la root y desactivar el shell en el servidor web de usuario de nuevo:

exit
usermod -s /bin/false <webserveruser>

Tan extraño como suena: Después de que el sólo lectura de EXTRACCIÓN utilizando el servidor web script funcionó muy bien.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: