Perché ricevo "Autorizzazione negata (chiave pubblica)" quando provo a SSH da Ubuntu locale a un server Amazon EC2?


218

Ho un'istanza di un'applicazione in esecuzione nel cloud sull'istanza di Amazon EC2 e devo collegarla dal mio Ubuntu locale. Funziona bene su uno di Ubuntu locale e anche laptop. Ho ricevuto il messaggio "Autorizzazione negata (chiave pubblica)" durante il tentativo di accedere a SSH su EC2 su un altro Ubuntu locale. È così strano per me.

Sto pensando a una sorta di problemi con le impostazioni di sicurezza su Amazon EC2 che ha un accesso IP limitato a un'istanza o potrebbe essere necessario rigenerare un certificato.

Qualcuno conosce una soluzione?


11
"Prima funzionava" - prima di cosa ?
womble

Ho un'istanza Elastic Beanstalk EC2. Ad agosto 2013, la soluzione era accedere all'istanza in quanto l'utente ec2-utente che ha eliminato l'errore Permission Denied (publicKey). Vale a dire: ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. Naturalmente si deve tutte le altre cose come per stackoverflow.com/questions/4742478/...
mikemay

3
Questo problema si presenta se si specifica il nome utente errato. I documenti aws ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ) attualmente forniscono un esempio con il nome utente ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com], mentre la mia (vecchia) scatola di Ubuntu ha un nome utente di Ubuntu, quindi quando ho usato l'esempio ho ricevuto questo errore, passando al nome utente corretto si risolve.
david.barkhuizen,

@ david.barkhuizen, il tuo commento mi ha aiutato. Ho avuto un problema simile; si è scoperto che aveva a che fare con il nome utente. Grazie.
NaijaProgrammer

Risposte:


143

La prima cosa da fare in questa situazione è usare l' -vopzione ssh, in modo da poter vedere quali tipi di autenticazione vengono provati e quali sono i risultati. Questo aiuta a illuminare la situazione?

Nel tuo aggiornamento alla tua domanda, menzioni "su un altro Ubuntu locale". Hai copiato sulla chiave privata ssh sull'altra macchina?


2
Ho copiato la chiave privata ssh sull'altra macchina come suggerito da @Greg. Ora funziona. Grazie!
Vorleak Chy,

3
Cordiali saluti, è possibile utilizzare il flag -i per indicare il percorso delle chiavi senza installarle
Jorge Vargas,

20
Nel mio caso, stavo usando un .ami bitnami e non mi resi conto che è necessario eseguire il login come utente chiamato bitnami, come: ssh -i <keyfile> bitname@<ec2-address>. Sfortunatamente l' -vopzione non mi ha aiutato a trovarlo, ma è comunque molto utile verificarlo!
Matt Connolly,

7
bene, nel mio caso stavo usando un nome utente sbagliato. stava usando "Ubuntu" invece di "bitnami". in questo modo: ssh -i key.pem bitnami @ hostaddress
Lucas Pottersky

3
Un buon vantaggio è anche il nodo remoto stesso, guarda /var/log/auth.log, a volte vedrai i seguenti messaggi: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keyso qualcos'altro
Jonas Libbrecht

76

Poiché non è stato esplicitamente menzionato, sshd è di default molto severo per quanto riguarda le autorizzazioni per i authorized_keysfile. Quindi, se authorized_keysè scrivibile per qualcuno diverso dall'utente o può essere reso scrivibile da chiunque diverso dall'utente, rifiuterà di autenticarsi (a meno che non sia configurato con sshd StrictModes no)

Ciò che intendo per "può essere reso scrivibile" è che se una qualsiasi delle directory principali è scrivibile per chiunque non sia l'utente, gli utenti autorizzati a modificare tali directory possono iniziare a modificare le autorizzazioni in modo tale da poter modificare / sostituire le chiavi autorizzate.

Inoltre, se la /home/username/.sshdirectory non è di proprietà dell'utente e quindi l'utente non dispone delle autorizzazioni per leggere la chiave, è possibile riscontrare problemi:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Nota che jane non possiede il .sshfile. Correggi tramite

chown -R jane:jane /home/jane/.ssh

Questo tipo di problemi con le autorizzazioni del filesystem non verranno visualizzati ssh -ve non verranno nemmeno visualizzati nei registri sshd (!) Fino a quando non imposterai il livello di registro su DEBUG.

  • Modifica /etc/ssh/sshd_config. Vuoi una riga che legga LogLevel DEBUGlì da qualche parte. Ricarica il server SSH usando il meccanismo fornito dalla distribuzione. ( service sshd reloadsu RHEL / CentOS / Scientific.) Un caricamento grazioso non eliminerà le sessioni esistenti.
  • Prova a eseguire nuovamente l'autenticazione.
  • Scopri dove vanno i log della tua struttura di autenticazione e leggili. (IIRC, /var/log/auth.logsu distribuzioni basate su Debian; /var/log/securesu RHEL / CentOS / Scientific.)

Molto più facile capire cosa non va nell'output di debug che include errori di autorizzazione del filesystem. Ricorda di ripristinare la modifica al /etc/ssh/sshd_configtermine!


5
Quel po '"può essere reso scrivibile" è ciò che mi ha preso
wmarbut

7
FWIW le autorizzazioni corrette per i file delle chiavi sono 600 (vedi qui )
Matt Lyons,

1
Sì, il mio file .authorized_keys era scrivibile per gruppo, quindi si è rifiutato di accettare.
Aditya MP,

2
Stavo battendo la testa contro il muro! La mia cartella utente aveva le autorizzazioni sbagliate. Grazie!
XJones,

4
lo stesso vale per la cartella ~ / .ssh stessa. potresti ricevere il seguente messaggio di errore:Authentication refused: bad ownership or modes for directory
Yevgeniy M.

37

Ho ricevuto questo errore, perché ho dimenticato di aggiungere l' -lopzione. Il mio nome utente locale non era lo stesso del sistema remoto.

Questo non risponde alla tua domanda, ma sono arrivato qui alla ricerca di una risposta al mio problema.


25
ssh host -l userè lo stesso ssh user@host, giusto?
Znarkus,

3
@Znarkus sì, è lo stesso.
Cregox,

Sì, questo ha risolto il mio problema causando anche l'errore "Autorizzazione negata (chiave pubblica)".
Brooks Moses,

1
Questo è stato il problema per me. Mi aspettavo che l'utente "root" funzionasse, ma stavo usando un'immagine Ubuntu EC2 che aveva l'utente predefinito "ubuntu".
Cerin,

20

Ho ricevuto questo messaggio su una nuova istanza basata sull'AMI di Ubuntu. Stavo usando l'opzione -i per fornire il PEM ma mostrava ancora "Autorizzazione negata (chiave pubblica)".

Il mio problema era che non stavo usando l'utente corretto. Eseguendo ssh con ubuntu @ ec2 ... ha funzionato normalmente.


Sì ... stavo eseguendo il comando con sudo, motivo per cui non funzionava.
thaddeusmt,

16

Qualcosa che è più facile da leggere di ssh -v(secondo me ovviamente), lo è tail -f /var/log/auth.log. Dovrebbe essere eseguito sul server a cui si sta tentando di connettersi, mentre si tenta di connettersi. Mostrerà errori in testo normale.

Questo mi ha aiutato a risolvere il mio problema:

Utente [nome utente] da xx.yy.com non consentito poiché nessuno dei gruppi di utenti è elencato in AllowGroups


questo è il registro del server. per RHEL / CentOS 7:tail -f /var/log/secure
Gianfranco P.

10

Controlla il tuo file / etc / ssh / sshd_config . Lì, trova la linea che dice

PasswordAuthentication no

Quella riga deve essere modificata per dire sì anziché no. Inoltre, riavviare il server sshd in seguito.

sudo /etc/init.d/ssh restart

18
Ciò renderebbe il server meno sicuro.
Znarkus,

Questo era il problema che avevo: volevo creare un account per un altro utente, autenticarmi con una sola password. Volevo anche essere in grado di accedere come me stesso da luoghi in cui non avevo la mia chiave privata.
Daniel,

1
Come possiamo andare /etc/ssh/sshd_config- se non riusciamo nemmeno ad entrare nel server?
kyo,

Per accedere al server stesso, è necessario utilizzare il file PEM che hanno distribuito quando è stata creata l'istanza. Le istruzioni seguono.
Sudipta Chatterjee,

Questo ha funzionato per me, anche se il riavvio di sshd ha richiesto il seguente comando:sudo service sshd reload
pacoverflow

6

Forse non è rilevante per l'attuale poster, ma potrebbe aiutare gli altri a trovarlo quando cercano risposte a situazioni simili. Invece di consentire ad Amazon di generare la coppia di chiavi ssh, ti consiglio di caricare su Amazon la tua chiave ssh pubblica standard, standard, specificando che quando esegui un'istanza EC2.

Ciò consente di rilasciare la sintassi di tipo "-i" in ssh, utilizzare rsync con opzioni standard e anche di utilizzare la stessa chiave ssh in tutte le regioni EC2.

Ho scritto un articolo su questo processo qui:

Caricamento delle chiavi SSH personali su Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys


+1 Ha cercato questa domanda esattamente per questo motivo.
John Riselvato,

vedo questo errore nel seguire il tuo articolo. regioni = $ (ec2-descrivi-regioni | cut -f2) Opzione richiesta '-K, --private-key KEY' mancante (-h per l'utilizzo)
KashifAli

@KashifAli Ti consigliamo di impostare le credenziali dello strumento da riga di comando dell'API EC2 in modo da non dover sempre passare le credenziali su ogni riga di comando.
Eric Hammond,

5

Stranamente, il mio problema si è rivelato essere che il server era stato riavviato ed è stato emesso un nuovo nome DNS. Stavo usando il vecchio nome DNS. So che sembra stupido, ma mi ci è voluto un po 'per capirlo.


Grazie! Questo era esattamente il mio problema. Non ho realizzato che il nome DNS è cambiato quando riavvii un'istanza.
Tim Swast,

Nel mio caso, l'URL * .compute.amazonaws.com è cambiato quando ho assegnato un IP elastico.
Geoffrey Booth,

2

Se stai provando a connetterti a un telefono CyanogenMod con Dropbear, dovresti eseguire le seguenti linee per assicurarti che tutto sia a posto:

chmod 600 /data/dropbear/.ssh/authorized_keys

o

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

e

chmod 755 /data/dropbear/ /data/dropbear/.ssh

Questo mi ha risolto, altrimenti niente può connettersi.


"quando si tenta di accedere a SSH su EC2 su un altro Ubuntu locale."
Grammargeek,

1
Che cosa succede se non dispongo di authorized_keys ?
IgorGanapolsky,

2

Se stai usando CentOS 5, si consiglia di impostare StrictModes noin /etc/ssh/sshd_config. Sto condividendo la directory / home usando NIS / NFS e ho impostato tutte le autorizzazioni correttamente, ma mi ha sempre richiesto la password. Dopo aver impostato StrictModes no, il problema è scomparso!


1

La risposta di Greg spiega come risolvere meglio i problemi, tuttavia il vero problema è che hai impostato una chiave ssh su un lato della transazione (il client), che sta tentando l'autenticazione con chiave pubblica anziché l'autenticazione basata su password. Dato che non hai la chiave pubblica corrispondente sull'istanza EC2, questo non funzionerà.


2
Come risolvere il problema?
Julien Grenier,

1

Ho avuto lo stesso problema e, dopo aver provato tonnellate di soluzioni che non funzionavano, ho aperto la porta SSH sul firewall del mio router (il pannello di controllo del firewall del mio router è un casino, quindi è difficile dire cosa sta succedendo). Comunque, questo l'ha risolto :)

Super fastidiosamente fastidioso che l'errore che ricevi sia Autorizzazione negata, il che implica che è stato fatto un qualche tipo di connessione, GRR.


1

Stavo avendo lo stesso problema anche se presumibilmente stavo seguendo tutti i passaggi inclusi

$ ec2-authorize default -p 22

Tuttavia, avevo iniziato la mia istanza nella regione us-west-1. Quindi il comando sopra dovrebbe anche specificare quello.

$ ec2-authorize default -p 22 --region us-west-1

Dopo questo comando sono stato in grado di scrivere nell'istanza. Ho trascorso un po 'di tempo prima di rendermi conto del problema e spero che questo post aiuti gli altri.


0

Questo è un caso raro, ma se hai selinux abilitato e stai usando nfs per la directory con le directory_autorizzazione (ad es. Directory home condivise), dovrai disabilitare selinux (non raccomandato per motivi di sicurezza, ma puoi disabilitarlo temporaneamente per vedere se questo sta causando il problema) o consentire a selinux di usare le directory home di nfs. Non sono chiaro sui dettagli, ma questo ha funzionato per me setsebool -P use_nfs_home_dirs 1


0

Ho appena riscontrato lo stesso problema dopo aver aggiunto inavvertitamente le autorizzazioni di scrittura di gruppo alla home directory degli utenti.

Ho scoperto che questa era la causa eseguendo tail -f /var/log/securesulla macchina e vedendo l'errore Authentication refused: bad ownership or modes for directory /home/<username>.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.