Risoluzione dei problemi di SSH: Permesso negato (chiave pubblica)

Incontri 'Permesso negato (chiave pubblica)' quando utilizzi SSH? Questa guida fornisce una panoramica completa per risolvere questo comune errore di autenticazione. Impara come verificare accuratamente le coppie di chiavi SSH, diagnosticare le autorizzazioni di file errate sia sul client che sul server e assicurarti che il tuo file `authorized_keys` sia configurato correttamente. Con esempi pratici e istruzioni passo-passo, riacquisterai un accesso sicuro ai tuoi sistemi remoti.

30 visualizzazioni

Risoluzione dei problemi di SSH "Permission Denied (publickey)"

Quando si tenta di connettersi a un server remoto tramite SSH, l'errore "Permission Denied (publickey)" (Accesso negato (chiave pubblica)) può rappresentare un ostacolo frustrante. Questo errore indica specificamente che il server ha rifiutato la connessione perché non è riuscito ad autenticarvi utilizzando la vostra chiave pubblica. A differenza dell'autenticazione basata su password, la crittografia a chiave pubblica si basa su una coppia di chiavi: una chiave privata mantenuta segreta sulla macchina locale e una chiave pubblica posizionata sul server. Questa guida illustrerà le cause comuni di questo errore e fornirà passaggi dettagliati per diagnosticarle e risolverle, garantendo un accesso SSH sicuro e senza interruzioni.

Comprendere il processo di autenticazione con chiave pubblica SSH è fondamentale per una risoluzione efficace dei problemi. Quando si tenta di connettersi, il client SSH presenta la propria chiave pubblica al server. Il server verifica quindi se questa chiave pubblica è autorizzata per il vostro account utente. In caso affermativo, il server crittografa una sfida con la vostra chiave pubblica e la rimanda indietro. Il vostro client, in possesso della chiave privata corrispondente, decifra la sfida e invia la risposta al server. Se la risposta è corretta, l'autenticazione riesce. Un errore "Permission Denied (publickey)" significa che questo scambio è fallito in qualche punto.

Cause Comuni di "Permission Denied (publickey)"

L'errore "Permission Denied (publickey)" può derivare da diversi problemi di configurazione. Identificare la causa principale spesso comporta il controllo sistematico dei seguenti componenti:

  • Permessi dei file non corretti: SSH è estremamente sensibile ai permessi dei file e delle directory per motivi di sicurezza. Permessi errati sulla vostra directory locale ~/.ssh, sul file della chiave privata, o sulla directory ~/.ssh e sul file authorized_keys lato server possono impedire l'autenticazione.
  • Voce mancante o errata in authorized_keys: Il file authorized_keys del server deve contenere la chiave pubblica corretta per l'utente con cui si sta tentando di accedere. Se la chiave è mancante, malformata o associata all'utente sbagliato, l'autenticazione fallirà.
  • Associazione chiave errata: Il vostro client SSH potrebbe offrire la chiave privata sbagliata, oppure il server potrebbe non avere la chiave pubblica corrispondente elencata nel file authorized_keys.
  • Problemi con l'Agente SSH: Se si utilizza un agente SSH, potrebbe non essere stato caricato correttamente con la chiave privata o potrebbe essere configurato in modo errato.
  • Configurazione SSH del server: Sebbene meno comune per questo errore specifico, la configurazione del demone SSH del server (sshd_config) potrebbe avere restrizioni specifiche sull'autenticazione tramite chiave pubblica.

Guida alla Risoluzione dei Problemi Passo Passo

Analizziamo i passaggi pratici per diagnosticare e risolvere questi problemi.

1. Verificare la Chiave Privata Locale e i Permessi

La configurazione SSH locale è il primo posto da controllare. Assicuratevi che la vostra chiave privata sia accessibile e abbia i permessi corretti.

Controllo dell'Esistenza della Chiave Privata

La vostra chiave privata si trova tipicamente in ~/.ssh/id_rsa (o id_ed25519, id_dsa, ecc.).

Verifica dei Permessi dei File Locali

La directory ~/.ssh e il file della chiave privata dovrebbero avere permessi restrittivi per prevenire accessi non autorizzati.

  • Directory ~/.ssh: Dovrebbe essere 700 (drwx------).
  • File chiave privata (es. id_rsa): Dovrebbe essere 600 (-rw-------).

Utilizzare il comando chmod per impostare i permessi corretti:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

Suggerimento: Se state utilizzando un nome di chiave diverso, sostituite id_rsa con il nome effettivo del file della chiave privata.

2. Verificare la Configurazione authorized_keys Lato Server

Questo è spesso il colpevole più comune. Il server deve avere la vostra chiave pubblica elencata correttamente per l'utente con cui state tentando di autenticarvi.

Accesso al Server (se possibile)

Se potete ancora accedere al server tramite un altro metodo (es. autenticazione con password, un altro account utente o una console), effettuate l'accesso per controllare il file authorized_keys.

Controllo della Posizione del File authorized_keys

Il file authorized_keys si trova tipicamente in ~/.ssh/authorized_keys all'interno della directory home dell'utente con cui si sta tentando di accedere.

Verifica dei Permessi dei File Lato Server

Similmente al lato client, i permessi lato server sono critici:

  • Directory ~/.ssh sul server: Dovrebbe essere 700 (drwx------).
  • File authorized_keys sul server: Dovrebbe essere 600 (-rw-------).

Assicuratevi che questi permessi siano impostati correttamente sul server:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Verifica del Contenuto di authorized_keys

Aprite il file ~/.ssh/authorized_keys utilizzando un editor di testo (es. nano, vim). Ogni chiave pubblica dovrebbe trovarsi su una singola riga. Assicuratevi che la chiave pubblica che intendete utilizzare sia presente e formattata correttamente. Dovrebbe iniziare con ssh-rsa, ssh-ed25519 o simile, seguito da una lunga stringa di caratteri e facoltativamente da un commento.

Esempio di voce in authorized_keys কিশোর:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD... stringa_della_vostra_chiave_pubblica utente@hostname

Importante: Non aggiungete la vostra chiave privata a authorized_keys. Solo la chiave pubblica deve trovarsi qui.

3. Assicurarsi che sia Stata Aggiunta la Chiave Pubblica Corretta

È possibile che sia stata copiata la chiave pubblica sbagliata o che la chiave pubblica sul server non corrisponda alla chiave privata locale.

Recupero della Chiave Pubblica Locale

La chiave pubblica è la controparte della chiave privata. È possibile visualizzarla utilizzando il comando ssh-keygen:

cat ~/.ssh/id_rsa.pub

Questo comando visualizzerà la chiave pubblica. Confrontate attentamente questo output con la voce nel file ~/.ssh/authorized_keys del server. Anche un singolo errore di battitura o un carattere mancante farà fallire l'autenticazione.

Suggerimento: Un modo rapido per aggiungere la chiave pubblica se si dispone dell'accesso con password al server è usare ssh-copy-id.

ssh-copy-id utente@indirizzo_ip_server

Questo comando aggiunge automaticamente la chiave pubblica predefinita (~/.ssh/id_rsa.pub) al file ~/.ssh/authorized_keys sul server remoto e imposta i permessi corretti.

4. Specificare la Chiave Privata Corretta (se non predefinita)

Se si utilizza una chiave privata non predefinita (es. ~/.ssh/my_other_key), è necessario indicare al client SSH quale chiave utilizzare.

Utilizzo del Flag -i

È possibile specificare il file di identità (chiave privata) con l'opzione -i:

ssh -i ~/.ssh/my_other_key utente@indirizzo_ip_server
Configurazione di ~/.ssh/config

Per comodità, è possibile configurare il client SSH per utilizzare sempre una chiave specifica per un dato host:

Creare o modificare il file ~/.ssh/config sulla macchina locale e aggiungere una voce come questa:

Host alias_server
  HostName indirizzo_ip_o_dominio_server
  User nome_utente
  IdentityFile ~/.ssh/my_other_key

Quindi è possibile connettersi semplicemente usando:

ssh alias_server

5. Controllare lo Stato dell'Agente SSH

Se vi affidate a un agente SSH per gestire le vostre chiavi, assicuratevi che sia in esecuzione e che la vostra chiave sia caricata.

Controllo dell'Esecuzione dell'Agente
echo "$SSH_AUTH_SOCK"

Se questo restituisce un percorso, l'agente è probabilmente in esecuzione. Se è vuoto, potrebbe essere necessario avviarne uno.

Aggiunta della Chiave all'Agente

Se la chiave non è caricata, aggiungerla:

ssh-add ~/.ssh/id_rsa

Se viene richiesto una passphrase, inserirla. È possibile verificare quali chiavi sono state aggiunte con ssh-add -l.

6. Debug con la Modalità Verbosa

SSH dispone di una modalità verbosa (-v, -vv o -vvv per livelli di dettaglio crescenti) che può fornire indizi inestimabili su dove stia fallendo il processo di autenticazione.

ssh -vvv utente@indirizzo_ip_server

Esaminare l'output per i messaggi relativi all'autenticazione tramite chiave, all'offerta delle chiavi e alle risposte del server. Questo spesso indica direttamente il problema.

Esempio di frammento di output verboso che indica un fallimento publickey:

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: read PEM private key file /home/user/.ssh/id_rsa
debug1: failed to use sshkey: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password

Questo output potrebbe indicare che il client ha tentato di utilizzare id_rsa ma è fallito, passando quindi ad altri metodi.

7. Revisione di sshd_config Lato Server (Avanzato)

Sebbene meno comune per errori specifici di publickey (di solito apparirebbero altri errori), vale la pena notare il file di configurazione del demone SSH del server (/etc/ssh/sshd_config). Assicurarsi che PubkeyAuthentication yes non sia commentato e sia impostato su yes. Dopo aver apportato modifiche, è necessario ricaricare o riavviare il servizio SSH (es. sudo systemctl reload sshd o sudo systemctl restart sshd).

Riepilogo e Migliori Pratiche

La risoluzione dei problemi relativi all'errore SSH "Permission Denied (publickey)" comporta un controllo metodico delle configurazioni sia del client che del server. Le cause più frequenti sono legate ai permessi dei file errati sui file ~/.ssh e authorized_keys, e alle discrepanze tra la chiave pubblica sul server e la chiave privata sul client.

Punti Chiave:

  • I permessi sono fondamentali: Assicurarsi sempre che ~/.ssh sia 700 e che le chiavi private/authorized_keys siano 600 sia sul client che sul server.
  • Accuratezza della chiave pubblica: Verificare attentamente che la chiave pubblica esatta sia presente nel file authorized_keys del server.
  • Usa ssh-copy-id: Quando possibile, questo è il modo più sicuro e semplice per configurare l'autenticazione con chiave pubblica.
  • Modalità Verbosa: Sfruttare ssh -vvv per output diagnostici dettagliati.

Seguendo questi passaggi, dovreste essere in grado di diagnosticare e risolvere la maggior parte dei problemi di "Permission Denied (publickey)", ripristinando un accesso remoto sicuro ai vostri server.