pública puttygen publicas privadas por keygen generar como claves clave certificado autenticación php apache git github ssh-keys

php - puttygen - ssh-keygen windows



Generando claves SSH para el usuario ''apache'' (7)

Como eres root, puedes probarlo sudo -u apache ssh-keygen -t rsa

¿Cómo agrego claves SSH para el usuario ''apache'' en Linux?

FONDO

Estoy intentando agregar un enlace de servicio a github para notificar a una URL una vez que presiono mi repositorio. Tengo la siguiente configuración de página php:

<?php `git pull origin master`;

Sin embargo, obtengo el siguiente resultado:

sh: git: Permission denied

Esto se debe a que las claves que generé para el acceso github fueron generadas por mi usuario ''root''. Sin embargo, cuando ejecuto un comando desde php, es el usuario ''apache'' el que lo ejecuta.

Por lo tanto, las claves no se corresponden y se denega el permiso para tirar.

Como no puedo cambiar de usuario desde el terminal para generar claves como ''apache'', no estoy muy seguro de qué hacer. ¿Puede alguien sugerir una solución?


Las respuestas existentes son incompletas o inseguras. Si coloca su directorio .ssh en el directorio de inicio del usuario de apache ( /var/www ), probablemente también sirva los contenidos de ese directorio y exponga su clave privada ssh a la web pública. Para evitar esto, deberá configurar apache para que no sirva al directorio .ssh , pero ninguna de las respuestas existentes explica cómo hacerlo.

También diría que todavía es peligroso que el directorio .ssh sea ​​un subdirectorio de su www-root servida públicamente, porque incluso si agrega una regla a su configuración de apache, actualizar el servidor o hacer otras configuraciones no relacionadas podría anular esta regla sin que te des cuenta

Así que aquí hay una respuesta que coloca la llave en otro lugar, donde no está servida por apache por defecto. Ni siquiera existe la necesidad de convertirse alguna vez en el usuario de www-data mientras otros están luchando.

Primero, busca el directorio de inicio de nuestro usuario de apache, por ejemplo, examinando /etc/passwd y buscando el usuario de www-data o como se llame al usuario apache de tu distribución. El directorio de inicio es probable /var/www .

Luego ejecute (reemplazando /var/www con el directorio de inicio del usuario de apache en su configuración):

$ mkdir "$HOME/www-data.ssh" $ ssh-keygen -q -t rsa -f "$HOME/www-data.ssh/id_rsa" -N "" $ chown -R www-data:www-data "$HOME/www-data.ssh" $ mkdir /var/www/.ssh $ cat << END > /var/www/.ssh/config > Host * > IdentityFile $HOME/www-data.ssh/id_rsa > END $ chown -R www-data:www-data /var/www/.ssh

Ahora su usuario de www-data usará la clave ssh en $HOME/www-data.ssh/id_rsa para todas sus conexiones ssh y dado que su $HOME probablemente sea diferente de /var/www , ese directorio no se publicará. Entonces, incluso sin agregar reglas personalizadas a apache, los usuarios podrán ver su .ssh/config pero no podrán acceder a la clave privada a la que apunta. Sin embargo, su usuario de www-data sabrá cómo hacerlo.


Me encontré con un problema similar y hay un inconveniente adicional. Para poder usar ssh con el usuario de apache, también debe editar el /etc/passwd para que la directiva de apache tenga un shell definido.

En mi caso, necesitaba cambiar

apache:x:48:48:Apache:/var/www:/sbin/nologin

a

apache:x:48:48:Apache:/var/www:/bin/bash


No sé si esto funcionará en redhat (supongo que eso es lo que está ejecutando), sin embargo, pude su a www-data (el usuario de apache para debian) ejecutando lo siguiente:

sudo su www-data

en realidad funcionó se encoge de hombros ir figura


Para agregar a @Vincent, si tiene SELinux habilitado, tendrá que establecer el contexto para la nueva carpeta .ssh.

En RHEL, agregue lo siguiente a este archivo: /etc/selinux/targeted/contexts/files/file_contexts.homedirs

/var/www/[^/]*/.+ system_u:object_r:user_home_t:s0 /var/www/[^/]*//.ssh(/.*)? system_u:object_r:ssh_home_t:s0

Y luego ejecuta el comando

# restorcon -Rv /var/www/


Puede que tenga que copiar las claves generadas por la raíz en el directorio .ssh de su usuario de apache.

Suponiendo que el homedir de apache es / var / www (verifique / etc / passwd) y la clave con nombre es id_rsa-git :

mkdir -p /var/www/.ssh/ cp /root/.ssh/id_rsa-git /var/www/.ssh/id_rsa

No es necesario copiar la clave pública.

Nota: de forma predeterminada, la clave utilizada es id_rsa o id_dsa . Puede cambiar el nombre de la clave copiada para que coincida con esto.

También puede cambiar la propiedad de la clave id_rsa y el directorio .ssh :

chown -R apache:apache /var/www/.ssh chmod 0700 /var/www/.ssh chmod 0600 /var/www/.ssh/id_rsa


Solo publicando el comentario de @KitCarrau, bajo la respuesta de yvan, eso funcionó para mí

sudo -u apache ssh-keygen -t rsa

para Debian

sudo -u www-data ssh-keygen -t rsa

después de esto, haga clic en Entrar dos veces para saltarse la frase de contraseña

Además, sugiere crear las claves públicas / privadas en el directorio /var/www/.ssh , incluso si tuviera mi directorio www en /home/my_user/www , está bien.