Por Anónimo (no verificado) , 29 Abril 2026

Introducción

Autenticarse a un remoto Git es mayormente invisible hasta que algo sale mal. Los dos mecanismos principales son claves SSH y credenciales HTTPS (contraseñas o, más comúnmente hoy, tokens de acceso personal).

Claves SSH

Genera una clave moderna:

ssh-keygen -t ed25519 -C "[email protected]"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519     # macOS
ssh-add ~/.ssh/id_ed25519                           # Linux

Añade la clave pública (~/.ssh/id_ed25519.pub) a tu cuenta de hosting. Prueba:

ssh -T [email protected]
# Hi ada! You've successfully authenticated...

Configuración SSH

Las sobrescrituras por host van en ~/.ssh/config:

Host github.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

Credenciales HTTPS

La mayoría de los hosts ya no aceptan contraseñas de cuenta; usa un personal access token (PAT) con los scopes correctos. Git lo almacena vía un asistente de credenciales:

git config --global credential.helper cache              # en memoria, expira
git config --global credential.helper "cache --timeout=86400"
git config --global credential.helper osxkeychain        # macOS
git config --global credential.helper manager            # Windows
git config --global credential.helper store              # archivo en texto plano (solo si debes)

La primera vez que pusheas, Git pregunta y el asistente guarda el token.

Inspeccionando y limpiando

echo "url=https://github.com" | git credential fill
echo "url=https://github.com" | git credential reject

git credential es una interfaz de bajo nivel al asistente.

Asistentes por host

git config --global credential.https://github.com.helper manager
git config --global credential.https://gitlab.com.helper cache

Útil cuando hosts diferentes requieren métodos de autenticación diferentes.

Firmando commits y tags

Autenticación y firma son diferentes. Firmar prueba la autoría de un commit:

git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git commit -S -m "Signed commit"
git log --show-signature -1

2FA y SSO

Si tu host requiere 2FA, la autenticación HTTPS necesita un PAT (las contraseñas están bloqueadas). Para organizaciones protegidas con SSO, el PAT también debe estar autorizado por SSO; de lo contrario los pushes obtienen un vago error "permission denied".

Credenciales por URL

El sistema de credenciales de Git puede almacenar credenciales diferentes por host o ruta. La clave de coincidencia es el prefijo de URL, así que puedes tener tokens separados para, digamos, tus orgs personales y de trabajo de GitHub:

git config --global credential.https://github.com/work-org.helper manager
git config --global credential.https://github.com/personal.helper "store --file ~/.git-creds-personal"
git credential fill <<<"url=https://github.com/work-org/repo"

La configuración credential.useHttpPath le dice a Git que incluya la ruta en la clave de búsqueda, permitiendo credenciales por repo. Úsala solo cuando se necesite; multiplica el número de entradas almacenadas.

Errores comunes

Pushear con un token que carece de los scopes correctos (p.ej. read-only); el mensaje de error es genérico. Otorgar scopes excesivamente amplios "para estar seguro"; minimiza. Almacenar tokens en credential.helper store en máquinas compartidas; es un archivo en texto plano. Olvidar subir tu clave pública SSH al host y quedar perplejo por "permission denied (publickey)"; ssh -vT git@host muestra qué está pasando. Finalmente, mezclar protocolos: asegúrate de que la URL de tu remoto coincida con tu método de autenticación; git remote set-url puede cambiarla.