Da Anonimo (non verificato) , 29 Aprile 2026

Introduzione

Autenticarsi a un remote Git è perlopiù invisibile finché qualcosa non va storto. I due meccanismi principali sono chiavi SSH e credenziali HTTPS (password o, più comunemente oggi, personal access token).

Chiavi SSH

Genera una chiave moderna:

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

Aggiungi la chiave pubblica (~/.ssh/id_ed25519.pub) al tuo account di hosting. Test:

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

Configurazione SSH

Le sovrascritture per host vanno in ~/.ssh/config:

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

Credenziali HTTPS

La maggior parte degli host non accetta più le password dell'account; usa un personal access token (PAT) con gli scope giusti. Git lo memorizza tramite un credential helper:

git config --global credential.helper cache              # in memoria, scade
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              # file in chiaro (solo se devi)

La prima volta che fai push, Git richiede il token e l'helper lo salva.

Ispezionare e cancellare

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

git credential è un'interfaccia di basso livello all'helper.

Helper per host

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

Utile quando host diversi richiedono metodi di auth diversi.

Firmare commit e tag

Autenticazione e firma sono diverse. La firma prova la paternità di 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 e SSO

Se il tuo host richiede 2FA, l'auth HTTPS ha bisogno di un PAT (le password sono bloccate). Per le organizzazioni protette da SSO, il PAT deve essere anche autorizzato SSO; altrimenti i push ricevono un errore vago "permission denied".

Credenziali per URL

Il sistema di credenziali di Git può memorizzare credenziali diverse per host o path. La chiave di match è il prefisso URL, quindi puoi avere token separati per, diciamo, le tue org GitHub personali e di lavoro:

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"

L'impostazione credential.useHttpPath dice a Git di includere il path nella chiave di lookup, permettendo credenziali per repo. Usalo solo quando necessario; moltiplica il numero di entry memorizzate.

Errori comuni

Pushare con un token che manca degli scope giusti (es. read-only); il messaggio di errore è generico. Concedere scope eccessivamente ampi "per sicurezza"; minimizza. Memorizzare token in credential.helper store su macchine condivise; è un file in chiaro. Dimenticare di caricare la tua chiave pubblica SSH sull'host ed essere sconcertati da "permission denied (publickey)"; ssh -vT git@host mostra cosa sta succedendo. Infine, mescolare protocolli: assicurati che il tuo URL remote corrisponda al tuo metodo di auth; git remote set-url può cambiarlo.