W3docs

Chiave SSH

Cos'è una chiave SSH, che tipi esistono e come configurarla su Mac, Linux o Windows? Scopri tutte le informazioni utili con esempi di codice.

Quando esegui un push o un pull da un repository remoto tramite SSH (ad esempio un URL [email protected]:...), Git deve verificare la tua identità senza dover digitare una password ogni volta. Le chiavi SSH risolvono questo problema. Questo capitolo spiega cos'è una chiave SSH, come funziona la coppia di chiavi e come generarne una e registrarla con un server remoto su macOS, Linux e Windows.

Cosa sono le chiavi SSH?

Chiave SSH

Una chiave SSH è una credenziale di accesso utilizzata nel protocollo SSH (Secure Shell). SSH è un protocollo di rete che consente di accedere da un computer a un altro in modo sicuro e di gestire server, sistemi operativi e configurazioni tramite una connessione crittografata. Dal punto di vista funzionale, le chiavi SSH svolgono lo stesso ruolo di una password, ma sono molto più sicure: la chiave non viene mai trasmessa in rete e derivare la chiave privata da quella pubblica è computazionalmente impossibile.

Le chiavi SSH vengono sempre create in coppia, e ogni coppia è composta da una chiave pubblica e una chiave privata:

  1. Chiave pubblica (detta anche chiave autorizzata). Puoi condividerla liberamente e aggiungerla a ciascun sistema a cui vuoi accedere. Determina chi è autorizzato ad accedere.
  2. Chiave privata (detta anche chiave di identità). Rimane segreta sul tuo computer e non deve mai essere condivisa. Prova la tua identità a qualsiasi server che detiene la chiave pubblica corrispondente.

Le due chiavi sono collegate matematicamente. Un server cifra una sfida con la tua chiave pubblica; solo il possessore della chiave privata corrispondente può rispondere. È così che avviene l'autenticazione senza trasmettere mai un segreto.

Attenzione

Non condividere, inviare tramite email o committare mai la tua chiave privata (~/.ssh/id_ed25519). Solo il file con estensione .pub è destinato a essere copiato sui server e sui provider di hosting Git.

Perché usare le chiavi SSH con Git

  • Nessuna password ad ogni push. Una volta registrata la chiave, git push, git pull e git fetch tramite SSH si autenticano silenziosamente.
  • Più sicure delle password. Le chiavi non possono essere indovinate o forzate con brute-force come le password corte.
  • Richieste da molti host. GitHub non accetta più le password dell'account per le operazioni Git; le chiavi SSH (o i token) sono lo standard.

Per clonare un repository con SSH dopo aver configurato la chiave, usa la forma git@ dell'URL. Consulta Git Clone e Git Remote per informazioni su come vengono indirizzati i remote.

Come configurare le chiavi SSH?

Le chiavi SSH vengono generate con uno strumento di generazione di chiavi, quasi sempre ssh-keygen, incluso nel client OpenSSH. Utilizza algoritmi crittografici a chiave pubblica; i più comuni sono Ed25519 (moderno, breve, veloce, raccomandato) e RSA. Algoritmi più vecchi come DSA esistono ma sono ora considerati deboli e sono disabilitati per impostazione predefinita nelle versioni attuali di OpenSSH.

Il flag -t seleziona l'algoritmo. Due scelte comuni:

# Recommended: Ed25519
ssh-keygen -t ed25519 -C "[email protected]"

# Compatibility fallback: RSA with a 4096-bit key
ssh-keygen -t rsa -b 4096 -C "[email protected]"

Il flag -C aggiunge un commento (tipicamente la tua email) in modo che la chiave sia facile da identificare in un elenco di chiavi autorizzate.

Creare una chiave SSH su Mac e Linux

Entrambi i sistemi operativi includono un terminale moderno e il pacchetto OpenSSH, quindi i passaggi sono identici.

  1. Apri un terminale ed esegui:

Genera la coppia di chiavi

ssh-keygen -t ed25519 -C "[email protected]"
  1. Scegli dove salvare la chiave. Premi Invio per accettare la posizione predefinita (~/.ssh/id_ed25519):

Scegli il percorso del file

> Enter a file in which to save the key (~/.ssh/id_ed25519): [Press enter]

Vengono creati due file: la chiave privata id_ed25519 e la chiave pubblica id_ed25519.pub.

  1. Imposta una passphrase. Questa cifra la chiave privata su disco, così anche un file di chiave rubato è inutile senza di essa. Ti verrà chiesta ogni volta che la chiave viene usata per la prima volta in una sessione:

Imposta una passphrase

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
  1. Aggiungi la nuova chiave SSH all'ssh-agent. L'ssh-agent mantiene le tue chiavi private decrittografate in memoria e firma le richieste di autenticazione per conto tuo, in modo che tu debba digitare la passphrase solo una volta per sessione.

Esegui il seguente comando per assicurarti che l'ssh-agent sia in esecuzione:

Chiave SSH su Linux

eval "$(ssh-agent -s)"
> Agent pid 59566

Se l'ssh-agent è in esecuzione, aggiungi la nuova chiave SSH all'agente SSH locale eseguendo il seguente comando:

Chiave SSH

ssh-add ~/.ssh/id_ed25519

(Nota: Su macOS moderni (OpenSSH 8.8+), ssh-add -K è deprecato. In alternativa, aggiungi AddKeysToAgent yes al file ~/.ssh/config per mantenere automaticamente le chiavi nel portachiavi.)

  1. Copia la chiave pubblica sul server remoto. Per usare la chiave per l'autenticazione, devi aggiungerla al file ~/.ssh/authorized_keys del server remoto. Esegui il seguente comando dalla tua macchina locale:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
  1. Verifica la connessione. Prova ad accedere al server remoto usando la nuova chiave:
ssh user@remote_host

Creare una chiave SSH su Windows

Hai bisogno di Git Bash per creare una chiave SSH sul sistema operativo Windows. Apri Git Bash ed esegui il seguente comando per generare la chiave:

ssh-keygen -t ed25519 -C "[email protected]"

Segui le stesse istruzioni descritte sopra per impostare la posizione del file e la passphrase. Dopo aver generato la chiave, copiala sul tuo server remoto o servizio di hosting Git usando il comando ssh-copy-id, oppure incollando il contenuto di id_ed25519.pub nelle impostazioni delle chiavi SSH del servizio.

Aggiungere la chiave a GitHub, GitLab o Bitbucket

Un host Git non è un server SSH che controlli, quindi ssh-copy-id non è applicabile — devi incollare la chiave pubblica nell'interfaccia web. Stampa la chiave pubblica e copiala:

cat ~/.ssh/id_ed25519.pub

L'output è una singola riga che inizia con ssh-ed25519 e termina con il commento che hai impostato:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [email protected]

Copia l'intera riga e aggiungila nelle impostazioni delle chiavi SSH del tuo account (su GitHub: Impostazioni → SSH and GPG keys → New SSH key). Poi verifica la connessione:

ssh -T [email protected]

Una prima connessione riuscita ti chiede di confermare l'impronta digitale dell'host e poi ti saluta con il nome utente — non apre una shell, il che è previsto per GitHub.

Una volta registrata la chiave, cambia il tuo remote all'URL SSH in modo che i push lo utilizzino:

git remote set-url origin [email protected]:user/repo.git

Consulta Git Remote per la gestione degli URL remoti e Git Push per inviare i tuoi commit.

Problemi comuni e suggerimenti

  • Permission denied (publickey) di solito significa che l'host non ha una chiave pubblica corrispondente, o che l'agente non detiene la tua chiave privata. Esegui ssh-add -l per elencare le chiavi caricate e aggiunge di nuovo la tua se necessario.
  • Riutilizza una chiave su più host. Una singola coppia di chiavi può autenticarsi su molti server; non hai bisogno di una nuova chiave per ogni progetto. Genera una chiave separata solo quando vuoi isolare l'accesso.
  • Fai il backup delle chiavi, non solo dei tuoi repository. Perdere ~/.ssh/id_ed25519 significa rigenerare e ri-registrare ovunque.
  • Le chiavi SSH autenticano le connessioni; se vuoi anche dimostrare chi ha creato un commit, è un meccanismo separato — consulta Signing Commits. Per la configurazione iniziale, consulta Install Git e Git Config.

Esercitazione

Pratica
Quali sono gli aspetti importanti delle chiavi SSH nel contesto di Git?
Quali sono gli aspetti importanti delle chiavi SSH nel contesto di Git?
Was this page helpful?