Estoy usando git pull
(sin sudo) todos los días en mi máquina, tengo una clave en la carpeta ssh ( cat ~/.ssh/id_rsa.pub
)
El problema es que no puedo llamar sudo git pull
porque recibo un error:
sudo git pull
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Probablemente haya un problema con mi llave.
Necesito llamarlo en mi script externo (usando sudo).
¿Cómo puedo llamar sudo git pull
? ¿Cómo puedo agregar una clave para sudo?
En resumen: pull
¿no funciona con sudo
por qué?
Respuesta1
Cuando ejecuta algo sudo
sin especificar un usuario en particular, lo está ejecutando como root
usuario.
Como parece que clonaste tu repositorio a través de SSH, git
(en realidad SSH, supongo) estás buscando la clave privada SSH para el root
usuario en lugar de la de tu usuario: /root/.ssh/
vs./home/your-user/.ssh/
Puedes probar lo siguiente:
Ejecute su script usando
sudo -E
:-E
Conserva las variables de entorno de su usuario para que se definan cuando se ejecuta en sudo (creo que algunas variables SSHSSH_AUTH_SOCK
seránSSH_AGENT_LAUNCHER
necesarias, pero no sé mucho sobre los detalles).Dentro de su script, ejecute el comando git "como usuario" en lugar de "como root". Para lograrlo, puedes confiar
sudo
nuevamente :)sudo -E -u $(logname) git pull
Observe que está usando sudo -E
dos veces: una para llamar al script y otra para llamar git
dentro del script.
Eso debería funcionar :)
PD: En caso de que necesite un control más detallado de qué variables de entorno se exportan a sudo, use --preserve-env=list
la opción en lugar de -E
.
Respuesta2
Cuando usas git con sudo busca la clave in /root/.ssh/
y no in /home/yourusername/.ssh/
. Sólo tienes que copiarlo en el primero y debería funcionar.