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.