Cómo permitir que git pull sea sudo

Cómo permitir que git pull sea sudo

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 pullporque 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 sudopor qué?

Respuesta1

Cuando ejecuta algo sudosin especificar un usuario en particular, lo está ejecutando como rootusuario.

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 rootusuario en lugar de la de tu usuario: /root/.ssh/vs./home/your-user/.ssh/

Puedes probar lo siguiente:

  • Ejecute su script usando sudo -E: -EConserva las variables de entorno de su usuario para que se definan cuando se ejecuta en sudo (creo que algunas variables SSH SSH_AUTH_SOCKserán SSH_AGENT_LAUNCHERnecesarias, 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 sudonuevamente :)

    sudo -E -u $(logname) git pull
    

Observe que está usando sudo -Edos veces: una para llamar al script y otra para llamar gitdentro 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=listla 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.

información relacionada