Autorizzazione negata (chiave pubblica) quando Accesso SSH all'istanza Amazon EC2 [chiuso]


355

Voglio usare la mia istanza di Amazon ec2 ma ho riscontrato il seguente errore:

Permission denied (publickey).

Ho creato la mia coppia di chiavi e scaricato il file .pem .

Dato:

chmod  600 pem file.

Quindi, questo comando

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

Ma hai questo errore:

Permission denied (publickey)

Inoltre, come posso collegarmi con filezilla per caricare / scaricare file?


1
per quanto riguarda la tua seconda domanda, connettiti con filezilla per caricare / scaricare file, controlla questo per istruzioni passo passo - y2u.be/e9BDvg42-JI
Yasitha Chinthaka

2
sei sicuro di non aver usato "sudo chmod 600 pem file" questo causerebbe questo errore e significherebbe che dovrai usare sudo prima di ssh
felbus,

Anche per alcuni sistemi operativi Debian il nome utente è admin. Almeno per le versioni 6.5 e 7.0.
Sviluppatore

2
Se il tuo nome utente è ec2-user, assicurati di non utilizzare ec2_user:)
grisaitis,

2
Assicurarsi che l' utente con cui si sta tentando di connettersi abbia la chiave elencata nel proprio $HOME/.ssh/authorized_keys file.
ILMostro_7,

Risposte:


589

Questo messaggio di errore indica che non è stato possibile eseguire l'autenticazione.

Questi sono motivi comuni che possono causare che:

  1. Prova di connettersi con la chiave sbagliata. Sei sicuro che questa istanza stia usando questa coppia di chiavi?
  2. Prova di connettersi con un nome utente errato. ubuntuè il nome utente per la distribuzione AWS base Ubuntu, ma su alcuni altri è di ec2-user(o adminsu alcune Debians, secondo la risposta di Bogdan Kulbida) (può anche essere root, fedora, vedi sotto)
  3. Prova di connettere l'host sbagliato. È l'host giusto a cui stai tentando di accedere?

Nota che 1.accadrà anche se hai incasinato il /home/<username>/.ssh/authorized_keysfile sulla tua istanza EC2.

A proposito 2., le informazioni su quale nome utente si dovrebbe usare spesso mancano dalla descrizione dell'immagine AMI. Ma puoi trovarne alcuni nella documentazione di AWS EC2, punto elenco4. : http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Utilizzare il comando ssh per connettersi all'istanza. Specifichi il file della chiave privata (.pem) e il nome utente @ nome_dns pubblico. Per Amazon Linux, il nome utente è ec2-user. Per RHEL5, il nome utente è root o ec2-user . Per Ubuntu, il nome utente è ubuntu . Per Fedora, il nome utente è fedora o ec2-user . Per SUSE Linux, il nome utente è root . Altrimenti, se l'utente ec2 e root non funzionano, consultare il proprio provider AMI.

Infine , tieni presente che ci sono molte altre ragioni per cui l'autenticazione fallirebbe. SSH di solito è piuttosto esplicito su cosa è andato storto se ti interessa aggiungere l' -vopzione al tuo comando SSH e leggere l'output, come spiegato in molte altre risposte a questa domanda.


2
Non credo che l'interfaccia ti offra di aggiungere una chiave a un'istanza in esecuzione, quindi dovrai avviarne una nuova se hai perso la chiave per l'istanza in esecuzione.
Thibault D.

81
# 2 risolto il mio problema, grazie!
Rckehoe,

4
Questa risposta l'ha risolto per me. Il nome utente predefinito per questa istanza era "ubuntu", non ec2-user come indicato nel manuale di AWS. Prova a utilizzare'ec2-user@_your_EC2_IP.amazonaws.com
emf

7
Per quanto riguarda # 1, chiave errata, l'aggiunta di -v (verboso) alla riga di comando ssh mi ha mostrato quali chiavi stava provando e questo mi ha portato a capire che non stava provando la chiave che avevo generato perché l'avevo chiamato con un nome diverso da id_rsa o id_dsa.
KC Baltz,

3
"Ubuntu è il nome utente per la distribuzione AWS basata su Ubuntu," Questo è ciò che mi ha preso. È stato utilizzato per l'utente ec2, solo supposto che fosse sempre il nome utente.
Nate Reed,

48

In questo caso il problema sorge dalla perdita della coppia di chiavi. A questo proposito:

  • Non è possibile modificare la coppia di chiavi in ​​un'istanza . Devi creare una nuova istanza che utilizza una nuova coppia di chiavi.
  • Puoi aggirare il problema se l'istanza viene utilizzata da un'applicazione su Elastic Beanstalk .

Puoi seguire questi passaggi:

  1. Accesso a console di gestione AWS
  2. Apri fagiolo magico elastico scheda
  3. Seleziona la tua applicazione da Tutte le applicazioni scheda
  4. Dal menu di sinistra selezionare Configurazione
  5. Clicca sul istanze Gear
  6. In Server Form controlla l' ingresso EC2 Key Pair e seleziona la tua nuova Key Key. Potrebbe essere necessario aggiornare l'elenco per vedere una nuova coppia di chiavi appena creata.
  7. Salva
  8. Elastic Beanstalk creerà per te nuove istanze associate alla nuova coppia di chiavi.

In generale, ricorda che devi consentire alla tua istanza EC2 di accettare il traffico SSH in entrata.

Per fare ciò, è necessario creare una regola specifica per il gruppo di sicurezza dell'istanza EC2. Puoi seguire questi passaggi.

  1. Accesso alla console di gestione AWS
  2. Apri la scheda EC2
  3. Dall'elenco Istanze seleziona l'istanza che ti interessa
  4. Nella scheda Descrizione controllare il nome del gruppo di sicurezza utilizzato dall'istanza.
  5. Sempre nella scheda Descrizione fai clic su Visualizza regole e controlla se il tuo gruppo di sicurezza ha una regola per il traffico ssh in entrata sulla porta 22
  6. In caso contrario, nel menu Rete e sicurezza selezionare Gruppo sicurezza
  7. Selezionare il gruppo di sicurezza utilizzato dall'istanza e fare clic scheda Inbound
  8. A sinistra della scheda Inbound è possibile comporre una regola per il traffico in ingresso SSH:
    • Crea una nuova regola : SSH
    • Origine : indirizzo IP o sottorete da cui si desidera accedere all'istanza
    • Nota : se desideri concedere un accesso illimitato alla tua istanza, puoi specificare 0.0.0.0/0 , anche se Amazon non consiglia questa pratica
  9. Fai clic su Aggiungi regola e quindi Applica le tue modifiche
  10. Controlla se sei ora in grado di connetterti alla tua istanza tramite SSH.

Spero che questo possa aiutare qualcuno come mi ha aiutato.


1
La seconda parte della tua risposta è sbagliata. Non puoi ottenere "Autorizzazione negata (chiave pubblica)". se non hai impostato correttamente le impostazioni del firewall (gruppi di sicurezza). "Autorizzazione negata (chiave pubblica)." è un messaggio di errore di SSH ed è la prova che la configurazione dei gruppi di sicurezza è corretta. Invece, otterresti "ssh: connettiti all'host xxxx porta 22: Connessione rifiutata"
Thibault D.

Per farla breve: il messaggio di errore indica che questo problema non ha nulla a che fare con la configurazione dei gruppi di sicurezza.
Thibault D.

Hai ragione. La seconda parte tratta un altro tipo di problema. Ho riparato il post.
Matteo Ceserani,

Se hai perso la chiave, penso che un modo possibile per risolverlo sarebbe fare un'istantanea dell'istanza e quindi avviarne una nuova con una nuova chiave. In tal caso, Amazon aggiunge la nuova chiave pubblica in .ssh / authorized_keys, quindi assicurati di rimuovere quella precedente in seguito. (e fai attenzione a non rimuovere quello nuovo o tornerai al tuo primo numero)
Thibault D.

43

Ecco come ho risolto il problema

ssh -i <key> ec2-user@<ec2 ip>

1
Sembrava che la chiave per me qui fosse l'indirizzo DNS dell'host vs IP. ec2-user @ <ip> ha funzionato per me.
Zack,

1
Anche la soluzione.
Tpojka,

26

Ho risolto il problema appena sudoprima

sudo ssh -i mykey.pem myec2.amazonaws.com

Ma la soluzione corretta è cambiare prima la proprietà, quindi connettersi come un normale utente come ha detto Janus Troelsen di seguito. Nel mio caso sarebbe:

chown wellington:wellington key.pem

Ha funzionato per me (dopo aver dovuto aggiornare alcuni pacchetti)!
user1429980,

4
la soluzione corretta è innanzitutto modificare la proprietà, quindi connettersi come utente normale. usare sudo chown wellington:wellington key.pem.
Janus Troelsen,

funziona, nel tuo caso perché stai provando ad accedere a quella VM su Amazon che supporta l' utente root
Taimoor Changaiz,

Avevo fatto whoami poi sudo chown user_name_given_by_whoami xxxx.pem
Chirag Purohit

23

Prova a usare

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>

O

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>

1
Questo mi ha aiutato. Grazie per il consiglio! : D
jehzlau,

22

Un'altra possibile causa di questo errore:

Quando la home directory dell'utente è scrivibile in gruppo , l'utente non può accedere.

(Riprodotto su istanza Ubuntu.)


1
+1 Vorrei averlo letto 4 ore fa !!! Risolto il mio problema per cui rsync -a stava sovrascrivendo l'autorizzazione della mia cartella ec2-user.
Michael Hobbs,

Dopo aver mv la mia directory home, non ho potuto accedere.
Robert Moon,

Quindi, come si accede a una macchina così interessata e non si accede affatto ad essa?
PKHunter

Correggere le autorizzazioni su / home directory funziona anche per me, grazie! @AlexPetralia, il tuo link è rotto = / ma ha un post nel forum di aws che ne parla: forums.aws.amazon.com/message.jspa?messageID=334402
Liko

Qualcuno come Alex Petralia o @Michael Hobbs può ripubblicare (o riformulare) la soluzione a questo?
Jakub Langr,

7

per la microistanza ubuntu 12.04 lts ho dovuto impostare il nome utente come opzione

ssh -i pemfile.pem -l ubuntu dns

questo ha funzionato per me, sono sorpreso che non faccia parte della documentazione di aws per discutere effettivamente degli utenti che potrebbero essere richiesti.
Ben

7

Devi fare i seguenti passi:

  1. Apri il tuo client o terminale ssh se stai usando Linux.
  2. Individua il file della chiave privata e modifica la directory.
    cd <path to your .pem file>
  3. Eseguire i comandi seguenti:
    chmod 400 <filename>.pem
    ssh -i <filename>.pem ubuntu@<ipaddress.com>

Se l' ubuntuutente non funziona, provare con ec2-user.


5

Ho lottato con la stessa autorizzazione a cui è stato negato l'errore apparentemente dovuto

key_parse_private2: missing begin marker 

Nella mia situazione la causa era il file di configurazione ssh dell'utente corrente (~ / .ssh / config).

Utilizzando quanto segue:

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'

L'output iniziale ha mostrato:

debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config

... molte linee di debug tagliate qui ...

debug1: Next authentication method: publickey
debug1: Trying private key: /home/ec2-user/somekey.pem
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.

La terza riga sopra è dove è stato identificato il problema effettivo; tuttavia, ho cercato il messaggio di debug a quattro righe dal basso (sopra) e sono stato fuorviato. Non c'è un problema con la chiave, ma l'ho testato e confrontato altre configurazioni.

Il mio file di configurazione utente ssh ha ripristinato l'host tramite un'impostazione globale non intenzionale, come mostrato di seguito. La prima riga host non avrebbe dovuto essere un commento.

$ cat config
StrictHostKeyChecking=no
#Host myAlias
        user ec2-user
        Hostname bitbucket.org
#        IdentityFile ~/.ssh/somekey
#        IdentitiesOnly yes

Host my2ndAlias
        user myOtherUser
        Hostname bitbucket.org
        IdentityFile ~/.ssh/my2ndKey
        IdentitiesOnly yes

Spero che qualcun altro lo trovi utile.


4

Ho dimenticato di aggiungere il nome utente (ubuntu) durante la connessione della mia istanza di Ubuntu. Quindi ho provato questo:

ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com

e il modo corretto era

ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com

Errore legittimo per principianti. Se si dimentica di aggiungere il nome utente, verrà utilizzato il nome utente dell'utente con cui si è effettuato l'accesso nel computer locale.
Thibault D.

3

Questo mi è successo più volte. Ho usato Amazon Linux AMI 2013.09.2 e Ubuntu Server 12.04.3 LTS che sono entrambi di livello gratuito.

Ogni volta che ho lanciato un'istanza mi viene negata l'autorizzazione. Non l'ho verificato, ma la mia teoria è che il server non è completamente impostato prima di provare a utilizzarlo. Dopo alcuni tentativi con l'autorizzazione negata, aspetto alcuni minuti e quindi riesco a connettermi. Se riscontri questo problema, ti suggerisco di attendere cinque minuti e riprovare.


Ho aspettato 5 minuti. e ha funzionato. sono anch'io al livello gratuito. grazie
Emeka Mbah,

2

Ecco alcuni possibili scenari frustranti che producono questo errore:

Se stai pranzando una nuova istanza da un AMI che hai creato di un'altra istanza (ad esempio istanza xyz), la nuova istanza accetterà solo la stessa chiave utilizzata dall'istanza A. Questo è totalmente comprensibile ma diventa confuso perché durante il processo passo passo della creazione della nuova istanza, ti viene chiesto di selezionare o creare una chiave (all'ultimo passaggio) che non funzionerà.

Indipendentemente dalla chiave creata o selezionata, solo la chiave utilizzata per esempio XYZ verrà accettata dalla nuova istanza.


Wow, non ci ho mai pensato. L'uso della vecchia chiave ha risolto il problema per me. Grazie.
tolgamorf

Di solito aggiunge la nuova chiave pubblica al file authorized_keys, rendendone quindi entrambi utilizzabili. È passato un po 'di tempo da quando ho provato, ma è quello che mi aspetterei che accada.
Thibault D.

2

Ho lottato con questo per un po 'fino a quando ho trovato quanto segue:

eb ssh

Quando lo usi dalla directory del progetto, bingo-bango no muss no fuss, sei dentro


2

Nel mio caso, ho fatto quanto segue:

chmod 400 <key.pem>

ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)

Inizialmente stavo usando la root@parte e ho ricevuto questo messaggio:

Please login as the user "ec2-user" rather than the user "root".

2

Sono in Windows con WinSCP . Funziona perfettamente su File Explorer e PuTTY SSH Shell per accedere al mio Amazon EC2-VPC Linux. Non c'è nulla a che fare con chmod pem fileil fatto che utilizza myfile.ppk convertito da PuTTYgen dal file pem .


2

mi è successa la stessa cosa, ma tutto ciò che stava accadendo è che la chiave privata si è persa dal portachiavi sulla mia macchina locale.

ssh-add -K

ha aggiunto nuovamente la chiave, quindi il comando ssh per la connessione è tornato a funzionare.


Succede ogni volta dopo il riavvio e ho bisogno di rieseguire sopra il comando qualsiasi soluzione alternativa per questo.
silentsudo

1
non ho verificato questo, ma la risposta verificata qui potrebbe aiutare: apple.stackexchange.com/questions/254468/…
eiTan LaVi

1

Questo problema può essere risolto accedendo alla casella Ubuntu usando il comando seguente:

ssh -i ec2key.pem ubuntu@ec2-public-IP

1
Si prega di fornire alcuni dettagli.
Syeda Zunaira,

1

Ho avuto due volte le chiavi e la riga di comando ssh corrette (lo so perché sto duplicando un'istanza di Ubuntu 14.04 funzionante), ma non sono stata in grado di ssh in una nuova istanza, anche dopo aver atteso 5 minuti come suggerito da Wade Anderson sopra.

Ho dovuto distruggere e ricreare la macchina. Questo è successo in due diverse occasioni. Dato che inizialmente non riesco a entrare, non riesco a vedere cosa c'è che non va.

Quindi, se hai questo problema, provalo.


1

devi controllare queste poche cose:

  1. Assicurati che il tuo indirizzo IP sia corretto
  2. Assicurati di utilizzare la chiave corretta
  3. Assicurati di utilizzare il nome utente corretto, puoi provare: 3.1. admin 3.2. utente ec2 3.3. ubuntu

Ho avuto lo stesso problema, e risolto dopo aver cambiato il nome utente in Ubuntu. Nella documentazione AWS è stata menzionata l'utente ec2-user, ma in qualche modo non funziona per me.


1

La mia chiave privata è stata impostata su autorizzazione 400e mi ha permesso di negare l'autorizzazione impostandola su "644".

key_load_private_type: l'autorizzazione negata è l'errore specifico che stavo ottenendo

Soluzione: Sudo chmod 644 <key.pem>

Nota: impostato su 644 è obbligatorio, non funzionava con 400


1

Quando provi a farlo

ssh -i <.pem path> root@ec2-public-dns

Viene visualizzato un messaggio che consiglia di utilizzare il ec2-user.

Please login as the user "ec2-user" rather than the user "root".

Quindi usa

ssh -i <.pem path> ec2-user@ec2-public-dns


1

Ho avuto lo stesso problema ed è molto strano. Se ritieni di fare tutto bene, segui questo: alcune volte c'è confusione sull'utente per l'istanza EC2 !! Alcune volte ottieni ec2-user, ubuntu, centos ecc. Quindi controlla il tuo nome utente per il machie !!

Accedi con l'utente root ssh -i yourkey.pem (400 permission) root@<ip> genererà un errore e ti fornirà il nome utente disponibile . quindi accedi con quell'utente.


1

È una cosa di base, ma conferma sempre quale utente stai tentando di eseguire l'accesso. Im il mio caso è stata solo una distrazione . Stavo provando a utilizzare un utente root :

ssh -i ~/keys/<key_name> root@111.111.111.111

Ma era un altro utente :

ssh -i ~/keys/<key_name> dedeco@111.111.111.111

1

ho avuto lo stesso errore ma situazione diversa. a me è successo all'improvviso dopo un sacco di tempo che sono riuscito a ssh con successo sul mio computer remoto là fuori. dopo molte ricerche nella soluzione al mio problema c'erano le autorizzazioni per i file. è strano ovviamente perché non ho cambiato nessuna autorizzazione nel mio computer o in quella remota appartenente ai file / directory di ssh. quindi dalla buona wiki di archlinux eccolo qui:

Per il computer locale, procedere come segue:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

Per la macchina remota, procedere come segue:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

dopo che il mio ssh ha ricominciato a funzionare senza il permesso negato (publickey).


0

Un altro possibile problema: ID di accesso errato

Controlla le "Istruzioni d'uso"

Tutti i buoni suggerimenti di cui sopra, ma quello che ho incontrato è che ho selezionato un'istanza pre-fatta. Dopo l'avvio dell'istanza, consultare le istruzioni per l'uso. Ho usato erroneamente l'id di accesso della chiave privata quando nelle istruzioni avrei dovuto usare 'bitnami' (es. Bitnami @ domain -i key.pem)


0

Ho avuto un errore simile

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: xxxx.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

Il mio problema era che l'istanza non si avviava correttamente a causa di un errore sullo script di avvio all'avvio da Step 3: Configure instance detailsottoAdvanced details:

Quello che pensavo di aver inserito:

#include
 https://xxxx/bootstrap.sh


Ciò che è effettivamente inserito interrompe la configurazione dell'istanza

#include

https://xxxx/bootstrap.sh

Quindi la chiave pubblica sul lato dell'istanza non è stata creata


0

Fa distinzione tra maiuscole e minuscole.

Errato: utente SSH EC2 @ XXX.XX.XX.XX -i MyEC2KeyPair.pem

Corretto: SSH ec2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem


-1

Sono stato in grado di SSH da una macchina, ma non da un'altra. Risulta che stavo usando la chiave privata sbagliata.

Il modo in cui l'ho capito è stato ottenere la chiave pubblica dalla mia chiave privata, in questo modo:

ssh-keygen -y -f ./myprivatekey.pem

Ciò che è uscito non corrisponde a quello che era ~/.ssh/authorized_keyspresente nell'istanza EC2.


-1

Tutte le risposte in alto classificate sopra sono accurate e dovrebbero funzionare nella maggior parte dei casi. Nel caso in cui non fossero come nel mio caso, mi sono semplicemente sbarazzato del mio ~/.ssh/known_hostsfile sulla macchina da cui stavo cercando di risolvere e il problema è stato risolto. Sono stato in grado di connettermi in seguito.


Mentre l'eliminazione known_hostspuò risolvere un problema durante la connessione al server che ha cambiato la sua chiave host (sebbene sia un approccio errato comunque), sono abbastanza sicuro che non possa risolvere l' errore "Autorizzazione negata (chiave pubblica)" .
Martin Prikryl,
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.