Skip to main content

Solución de problemas de autenticación en un repositorio

Aprende a solucionar problemas comunes de autenticación que pueden aparecer al clonar, insertar o extraer de un repositorio en un codespace.

Al crear un codespace para un repositorio, por lo general puedes usar git pull y git push para extraer e insertar cambios en ese repositorio sin autenticación adicional. Sin embargo, de vez en cuando pueden aparecer errores de autenticación al intentar ejecutar estas operaciones.

También pueden aparecer errores si intentas interactuar con un repositorio que no sea aquel desde el que creaste el codespace.

Autenticación en el repositorio desde el que creaste el codespace

Si intentas insertar o extraer del repositorio desde el que creaste el codespace, pero no se realiza la autenticación, es posible que aparezca un error como git@github.com: Permission denied (publickey) o Host key verification failed.

Estos errores pueden aparecer si usas un repositorio de dotfiles con GitHub Codespaces y has configurado Git para que use un protocolo distinto de HTTPS para transferir datos al repositorio remoto. Por ejemplo, puede que hayas configurado Git para usar SSH mediante la inclusión de líneas como las siguientes en un archivo de configuración de los dotfiles.

[url "git@github.com:"]
  insteadOf = https://github.com/

GitHub Codespaces usa el protocolo HTTPS de forma predeterminada y se autentica con un GITHUB_TOKEN configurado con acceso de lectura y escritura al repositorio desde el que creaste el codespace. Se recomienda usar el HTTPS predeterminado y GITHUB_TOKEN en el codespace. Los permisos de GITHUB_TOKEN normalmente se limitan a un solo repositorio, ya que se sigue el principio de seguridad de privilegios mínimos. La autenticación de SSH no tiene permisos de repositorio específicos, por lo que una exposición accidental de la clave de SSH podría proporcionar a alguien acceso a todos los repositorios.

Para usar el HTTPS predeterminado, quite la configuración en conflicto de los dotfiles. Si el repositorio de dotfiles contiene un script de instalación en un archivo reconocido como install.sh, puedes usar una lógica como la siguiente para excluir la configuración en los codespaces.

if [ -z "$CODESPACES" ]; then
  git config --global url."git@github.com".insteadOf "https://github.com"
fi

Si trabajas en un codespace creado a partir de un repositorio en el que confías y necesitas usar SSH, asegúrate de que el codespace está configurado para autenticarse con una clave SSH vinculada a una cuenta de GitHub. Para más información, consulta Generación de una nueva clave SSH y adición al agente SSH.

Autenticación en repositorios desde los que no creaste el codespace

El GITHUB_TOKEN de un codespace se configura con acceso de lectura y escritura al repositorio desde el que creaste el codespace. De forma predeterminada, el token no tiene acceso a otros repositorios. Es posible que no puedas clonar un repositorio o que no puedas insertar ningún elemento en un repositorio que hayas clonado.

No se recomienda actualizar manualmente el valor de GITHUB_TOKEN en un codespace. Si tu proyecto requiere acceso a otros repositorios, puedes proporcionar a los codespaces acceso a estos repositorios mostrando permisos adicionales en la configuración del contenedor de desarrollo. De esta forna, los usuarios podrán autorizar los permisos adicionales al crear un codespace. Sin embargo, no cambiarán los permisos de un codespace existente. Para más información, consulta Administración del acceso a otros repositorios dentro del codespace.

Si necesitas acceso a otro repositorio de un codespace existente, o si los permisos que necesitas son específicamente tuyos y no se aplican a otros colaboradores, puedes crear un personal access token con acceso al repositorio y agregar el token al codespace. Se recomienda limitar el acceso del token mediante un fine-grained personal access token y seleccionar solo los repositorios a los que se necesita acceder y conceder el acceso necesario solo al permiso Contenido. Para más información, consulta Administración de tokens de acceso personal.

Posteriormente, puede agregar el token como si fuera una variable de entorno en un codespace o como un secreto para GitHub Codespaces. Si crea un secreto, debe permitir que accedan a él exclusivamente ciertos repositorios de confianza. Al agregar un nuevo secreto, se le pedirá que vuelva a cargar el codespace existente para extraer el nuevo secreto. Para más información, consulta Administración de secretos específicos de la cuenta para GitHub Codespaces.

Para usar el token para autenticarse en un codespace, tienes las siguientes opciones.

  • Al crear la variable de entorno o el secreto, puede usar el nombre GH_TOKEN. La variable GH_TOKEN se usa de forma predeterminada en las operaciones de GitHub CLI, por lo que puedes usar el comando gh repo clone OWNER/REPO para clonar el repositorio.

    Sin embargo, si intentas insertar algún elemento en el repositorio mediante git push, el asistente de credenciales de Git intentará usar el GITHUB_TOKEN existente para autenticarse y se producirá un error. Puedes invalidar el asistente, pero esto puede provocar cierta fricción al intentar interactuar con el repositorio original desde el que creaste el codespace.

  • Puedes clonar el repositorio con una dirección URL que incluya el token de acceso. Reemplace YOUR-VARIABLE por el nombre de la variable de entorno o del secreto que ha creado.

    git clone https://USERNAME:$YOUR-VARIABLE@github.com/OWNER/REPO`
    

    De esta forma se almacenará el token de acceso para el repositorio específico, por lo que podrás insertar y extraer elementos del repositorio sin invalidar el asistente de credenciales existente.

    Note

    Si realizas la clonación de esta manera, el token se verá en la configuración de Git. Este método solo se debe usar cuando se trabaje en un codespace que se haya creado a partir de un repositorio de confianza y se debe limitar el ámbito del token de acceso tanto como sea posible.