Cosa vedi
user@server's password:
Permission denied, please try again.
user@server's password:
Permission denied, please try again.
user@server's password:
user@server: Permission denied (publickey,password).
Di default SSH chiede tre volte, poi stampa l'ultima riga. L'elenco tra parentesi è ciò che il server accetta ancora. Se non include password, o non hai mai visto una richiesta di password, hai un problema diverso: vedi Permission denied (publickey).
Provare da solo il login con password
Questo esclude chiavi e agent, e chiede una volta sola:
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password -o NumberOfPasswordPrompts=1 user@server
Causa 1: il nome utente sbagliato
Senza user@, SSH invia il nome del tuo utente locale, oppure quello della tua configurazione:
ssh -G server | grep '^user '
Un utente che non esiste riceve la stessa richiesta di password e lo stesso rifiuto, quindi sembra esattamente una password sbagliata. Le immagini cloud spesso usano ubuntu, debian o ec2-user invece di root.
Per fissare l'utente di un host una volta per tutte, metti una riga User nel suo blocco del file di configurazione ssh.
Causa 2: la password sbagliata
Controlla le cose ovvie: layout della tastiera, Blocco Maiuscole e caratteri nascosti dovuti a un incolla. SSH non mostra nulla mentre digiti. Conta anche il prompt: Enter passphrase for key vuole la passphrase del file della tua chiave, mentre user@server's password: vuole la password dell'account sul server.
Leggere il log del server
Se puoi raggiungere il server in un altro modo, come la console di un provider, questo risolve la questione. Su Debian e Ubuntu:
sudo journalctl -u ssh -n 30
Sui sistemi in stile Red Hat usa -u sshd. I sistemi più vecchi scrivono in /var/log/auth.log o /var/log/secure.
| Riga di log | Significato |
|---|---|
Failed password for invalid user name | Quell'utente non esiste sul server, oppure è escluso da AllowUsers |
User name from ... not allowed because not listed in AllowUsers | L'utente esiste ma non è nell'elenco |
Failed password for name | L'utente esiste e il controllo della password è fallito. È la password sbagliata, oppure una delle cause 3 e 4 |
| Nessuna riga | Stai raggiungendo un altro server o un'altra porta. Controlla ssh -G server | grep -E '^(hostname|port) ' |
Causa 3: root non può fare il login con una password
Il valore predefinito di PermitRootLogin è prohibit-password. Con questa impostazione, sshd mostra comunque la richiesta e risponde con questo messaggio anche se la password di root è corretta, e il log dice Failed password for root. Quindi il log non rivela il vero motivo. Chiedilo direttamente a sshd:
sudo sshd -T -C user=root,host=server,addr=203.0.113.10 | grep -i '^permitrootlogin'
Un risultato prohibit-password o il suo vecchio nome without-password lo conferma. Fai il login come utente normale e usa sudo, oppure usa una chiave per root. Vedi Disattivare il login root.
Causa 4: l'account è bloccato
sudo passwd -S name
Il secondo campo è L per bloccato, P per una password utilizzabile e NP per nessuna password. Un account bloccato dà lo stesso rifiuto, e il log di nuovo dice solo Failed password. Sbloccalo o imposta una nuova password:
sudo passwd -u name
sudo passwd name
Un account scaduto dà un testo diverso, Your account has expired; please contact your system administrator. Controllalo con sudo chage -l name. Una shell nologin ti fa entrare e poi stampa This account is currently not available.
Causa 5: AllowUsers, DenyUsers e le versioni per gruppi
Queste regole rifiutano un utente anche con la password giusta. Guarda cosa si applica a quell'utente, compresi i blocchi Match:
sudo sshd -T -C user=name,host=server,addr=203.0.113.10 | grep -iE '^(allowusers|denyusers|allowgroups|denygroups)'
Ricorda di controllare i file in /etc/ssh/sshd_config.d/. Dopo la modifica, esegui sudo sshd -t e ricarica il servizio.
Troppi tentativi
I fallimenti ripetuti possono portare a un nuovo sintomo: la connessione si interrompe prima della richiesta di password. È una penalità o un ban. Vedi kex_exchange_identification e fail2ban.
Domande
Perché SSH dice Permission denied se la password è giusta?
Spesso il nome utente è sbagliato, root non può usare la password (PermitRootLogin prohibit-password), l'account è bloccato oppure AllowUsers esclude l'utente. Il log del server indica il motivo vero.
Quanti tentativi di password concede SSH?
Il client chiede tre volte di base (NumberOfPasswordPrompts). Il server ne accetta fino a MaxAuthTries, 6 di base, contando tutti i metodi.
Un nome utente sbagliato dà un errore diverso?
No. Un utente che non esiste riceve la stessa richiesta di password e lo stesso rifiuto. Solo il log del server scrive invalid user.
Fonti
- sshd_config(5), PermitRootLogin, AllowUsers
- ssh_config(5), NumberOfPasswordPrompts
- passwd(1), man-pages di Linux