Come generare una chiave SSH su Windows

Apri PowerShell ed esegui ssh-keygen -t ed25519 -C "you@laptop". Premi Invio per accettare il file predefinito e digita una passphrase. La chiave privata viene salvata in C:\Users\you\.ssh\id_ed25519 e la chiave pubblica in id_ed25519.pub accanto. Solo il file .pub va sui server.

Aggiornata il .

Genera la chiave

ssh-keygen -t ed25519 -C "you@laptop"

Premi Invio per accettare il file predefinito. Se lì esiste già una chiave, digita un altro nome come C:\Users\you\.ssh\id_ed25519_work invece di sovrascriverla. Il commento dopo -C è solo un'etichetta, ed è visibile a chiunque veda la chiave pubblica.

Se PowerShell dice che ssh-keygen non è riconosciuto, manca il client OpenSSH. Installalo da un PowerShell con privilegi elevati:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Oggi Ed25519 è la scelta giusta. Per le differenze, vedi chiavi SSH RSA o ed25519.

Scegli una passphrase

La passphrase cifra il file della chiave privata, quindi una copia del file non basta per usarla. Impostane una a meno che la chiave serva per un job non presidiato. Puoi cambiarla più avanti senza cambiare la chiave:

ssh-keygen -p -f $env:USERPROFILE\.ssh\id_ed25519

Usa ssh-agent per digitarla una sola volta

Il servizio agent è disattivato per impostazione predefinita. Abilitalo una volta, in un PowerShell con privilegi elevati:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

Poi, in un PowerShell normale, come tuo utente:

ssh-add $env:USERPROFILE\.ssh\id_ed25519
ssh-add -l

Il secondo comando elenca le chiavi caricate. Se ssh-add dice che non riesce a collegarsi all'agent, il servizio non è in esecuzione: vedi Could not open a connection to your authentication agent.

Se Git chiede ancora la passphrase

Git per Windows può usare il proprio SSH incluso, che non riesce a raggiungere l'agent di Windows. La documentazione di GitHub indica questa soluzione:

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"

Copia la chiave pubblica

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard

Ora incollala dove ti serve: su GitHub, oppure su un server con l'alternativa PowerShell a ssh-copy-id.

Permessi dei file

ssh rifiuta una chiave privata che altri utenti possono leggere, con il messaggio UNPROTECTED PRIVATE KEY FILE. Le chiavi generate nella tua cartella .ssh hanno i permessi giusti. Il problema di solito compare quando una chiave viene copiata da un altro posto. Vedi la soluzione per quell'errore.

Fai una copia della chiave, o no

Il file della chiave privata è l'unica copia. Se lo perdi ne crei uno nuovo e sostituisci la chiave pubblica su ogni server, il che è spesso più semplice che tenere una copia di riserva. Se ne tieni una, tienila cifrata.

Un modo per farlo è un gestore di chiavi SSH con vault cifrato.

Domande

Dove salva la chiave ssh-keygen su Windows?

In C:\Users\you\.ssh. id_ed25519 è la chiave privata e id_ed25519.pub quella pubblica. Sui server e su GitHub va solo il file .pub.

Serve un programma in più per creare una chiave SSH su Windows?

No. Windows 10 e 11 includono il client OpenSSH, quindi ssh-keygen funziona in PowerShell. Se manca, aggiungi la funzionalità OpenSSH.Client.

Come cambio la passphrase in seguito?

Esegui ssh-keygen -p -f con il percorso della chiave privata. La chiave resta la stessa, quindi sui server non cambia nulla.

Fonti

Altro in SSH su ogni sistema

Tutte le guide