Tentativo di SSH in un'istanza Amazon Ec2 - errore di autorizzazione


745

Questa è probabilmente una domanda stupidamente semplice per alcuni :)

Ho creato una nuova istanza di Linux su Amazon EC2 e come parte di ciò ho scaricato il file .pem per consentirmi di accedere a SSH.

Quando ho provato a ssh con:

ssh -i myfile.pem <public dns>

Ho ottenuto:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

Seguendo questo post ho provato a chmod +600 il file pem, ma ora quando ssh ho appena ricevuto:

Permission denied (publickey).

Quale errore da ragazzo sto facendo qui? Il file .pem si trova nella mia cartella home (in osx). Le autorizzazioni sono simili a questa:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
Questo errore si verifica anche quando si utilizza un file pem errato.
Rahul Prasad,

Assicurati inoltre di aver creato l'istanza DOPO aver creato e selezionato la coppia di chiavi come chiave designata da utilizzare. L'ho fatto il contrario.
Gary,

Sono in Windows con WinSCP. Non c'è nulla a che fare con chmod 400 myfile.pemil fatto che utilizza myfile.ppkgenerato da PuTTYgen dal file pem.
Chetabahana,

Questo errore può verificarsi anche quando non accedi con l'utente giusto;)
andrea06590,

Risposte:


1463

Il problema sta avendo mod errato sul file.

Facilmente risolto eseguendo -

chmod 400 mykey.pem

Tratto dalle istruzioni di Amazon -

Il file chiave non deve essere visualizzabile pubblicamente affinché SSH funzioni. Utilizzare questo comando se necessario: chmod 400 mykey.pem

400 lo protegge rendendolo di sola lettura e solo per il proprietario.


3
Grazie mille! Cosa fa chmod 400? su mykey.pem?
Costa

19
400 lo protegge rendendolo di sola lettura e solo per il proprietario.
Kof

1
Dopo questo, ricevo "Avvertenza: file di identità blabla.pem non accessibile: nessun file o directory simile" quando eseguo ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
coolcool1994,

3
Questo comando + ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPrisolto il problema. Forse questa dovrebbe essere la risposta accettata ...
c4k,

1
Come posso eseguire lo stesso per Windows?
Ahsan Mukhtar

262

Probabilmente stai utilizzando un nome utente errato per accedere:

  • la maggior parte delle immagini di Ubuntu ha un utente ubuntu
  • L'AMI di Amazon lo è ec2-user
  • la maggior parte delle immagini Debian hanno rootoadmin

Per accedere, è necessario modificare il comando ssh:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH


30
oppure ssh -i key.pem ubuntu @ servername
jsh

43
Il messaggio di errore dice tutto: il file cert .pem non è abbastanza protetto. Esegui chmod 400 xyz.pem come suggerito di seguito.
allprog,

1
@allprog per me questo non fa altro che dire Permission denied (publickey).e nient'altro ...
Aram Kocharyan

1
Ho riscontrato il problema - Non utilizzavo la stessa chiave con cui ho creato l'istanza
Aram Kocharyan

12
Questa non è la soluzione: le autorizzazioni per il file chiave scaricato sono 844 per impostazione predefinita. dovrebbe essere 400 chmod 500 <path_to_pem_file>dovrebbe farlo.
Elad Meidar,

62

So che è molto tardi al gioco ... ma questo funziona sempre per me:

passo 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

passo 2, semplicemente ssh in :)

ssh user_name@<instance public dns/ip>

per esempio

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

spero che questo aiuti qualcuno.


"ssh-add" equivale a copiare il file * .pem nella cartella ~ / .ssh?
ア レ ッ ク ス

1
>> basta copiare il file * .pem nella cartella ~ / .ssh Non è lo stesso, è necessario aggiungere alla cartella ed eseguire il comando ssh-add.
super_p

Molto tardi al gioco, ma per aggiungere qualche chiarimento ... 1. aggiungi il file .pem alla directory ~ / .ssh (crealo se necessario), 2. usa il comando ssh-add per aggiungere l'identità all'autenticazione agente; questo significa non dover mai specificare il file .pem quando si usa ssh
Ian Atkin il

2
Dopo ssh-aggiungi ¬ / .ssh / key.pem; Ottenere l'errore Impossibile aprire una connessione al proprio agente di autenticazione. eval ssh-agent -sriporta SSH_AGENT_PID = 3409; ssh-add dà lo stesso errore di cui sopra ......... Qualsiasi aiuto qui plz
Tariq,

Wow, sarebbe molto conveniente per tutte le mie future connessioni al mio VPS. Grazie
Ahmad Mushtaq,

36

Ok amico, l'unica cosa che ha funzionato per me è stata:

  1. Modifica le autorizzazioni della chiave

    chmod 400 mykey.pem

  2. Assicurati di accedere utilizzando ec2-user e l'indirizzo ec2-99 ... corretto. L'indirizzo ec2-99 si trova nella parte inferiore della console aws quando hai effettuato l'accesso e hai visto la tua istanza elencata

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


Non riesco a trovare l'indirizzo ec2-99. Potete per favore aiutarmi?
Adil Malik,

1
chmod 400 mykey.pem accedi con ubuntu come segue: ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
Gal Bracha

27

Dai un'occhiata a questo articolo . Non si utilizza il DNS pubblico ma piuttosto il modulo

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

dove il nome è visibile sul pannello AMI


Saluti per l'articolo, molto utile!
Matt Roberts,

miglioramento minore: quando si tenta di accedere come root aws viene richiesto quanto segue: "Effettuare l'accesso come utente utente ec2 anziché come utente root."
Andre Schweighofer,

come faccio a sapere cos'è il mio ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com?
ア レ ッ ク ス

Console di gestione> EC2> Istanze e selezionare l'istanza.
Renick,

Il 'root @' è ciò che manca a tutti gli altri in questa risposta. Il tuo ha aiutato! Quello e chmod.
LordB8r,


13

In Windows puoi andare alle proprietà del file pem e andare alla scheda sicurezza, quindi per avanzare pulsante.

rimuovere l'eredità e tutte le autorizzazioni. quindi concediti il ​​pieno controllo. dopo tutto SSL non ti darà di nuovo lo stesso errore.


7

So che a questa domanda è già stata data una risposta, ma per quelli che li hanno provati tutti e si sta ancora ottenendo il fastidioso "permesso negato (chiave pubblica)". Prova a eseguire il comando con SUDO. Naturalmente questa è una soluzione temporanea e dovresti impostare le autorizzazioni correttamente, ma almeno ciò ti permetterà di identificare che il tuo attuale utente non è in esecuzione con i privilegi di cui hai bisogno (come hai assunto)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Una volta fatto questo riceverai un messaggio come questo:

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

Che è anche scarsamente documentato. In tal caso basta fare questo:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

E otterrai il glorioso:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
Grazie .. Stavo ancora ricevendo errori dopo aver provato tutte le opzioni sopra menzionate. Correre ssh con sudo ha funzionato per me.
Gursharan Singh,

Mi piacerebbe sapere perché devo eseguirlo in sudo. Ho provato chmod 400 xyz.pem, ma non ha aiutato.
Samuel Dominguez,

6

Nel terminale Mac, fare "chmod 400 xyz.pem" non mi ha aiutato, continuava a dire il permesso negato. Per gli utenti di Ubuntu vorrei suggerire

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (nota che l'utente è ubuntu)

4

Best practice per le chiavi SSH e le autorizzazioni dei file:

  • Directory .ssh - 0700 (solo dal proprietario)
  • chiave privata / file .pem - 0400 (solo lettura dal proprietario)
  • chiave pubblica / file .pub - 0600 (lettura e scrittura solo dal proprietario)

    chmod XXXX file/directory


3

ssh -i /.pem user @ host-machine-IP

Penso che sia perché hai inserito credenziali errate o, stai usando una chiave pubblica anziché una chiave privata o, le tue autorizzazioni di porta sono aperte per TUTTI a ssh. Questo è un male per Amazon.


3

Accesso alternativo tramite PuTTY. È buono ma necessita di alcuni passaggi.

  1. Ottieni il tuo .pem generato quando hai creato l'istanza EC2 per la prima volta.
  2. Converti il ​​file .pem .ppk usando PuttyGen poiché PuTTY non legge .pem.
  3. Apri PuTTY e inserisci il tuo nome host che è il nome utente dell'istanza + DNS pubblico (es. Ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). Non il nome utente del tuo account AWS.
  4. Quindi vai a Connessione> SSH> Aut . Quindi aggiungi il tuo file .ppk . Fai clic su Sfoglia dove dice "File chiave privata per l'autenticazione" .
  5. Fai clic su Apri e dovresti essere in grado di stabilire immediatamente la connessione.

Sto usando PuTTY 0.66 in Windows.


Funziona, ma c'è un modo per far funzionare direttamente la connessione ssh dalla riga di comando?
Ariel,

3

Oltre alle altre risposte, ecco cosa ho fatto per farlo funzionare:

  • Copia la chiave nella cartella .ssh se ancora non avessi:

cp key.pem ~/.ssh/key.pem

  • Assegnare le autorizzazioni appropriate alla chiave

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Quindi aggiungi la chiave

ssh-add ~/.ssh/key.pem

Ora dovresti essere in grado di ssh EC2 (:


2

Fai un chmod 400 yourkeyfile.pem Se la tua istanza è Amazon linux, usa ssh -i yourkeyfile.pem ec2-user @ ip per ubuntu ssh -i yourkeyfile.pem ubuntu @ ip per centos ssh -i yourkeyfile.pem centos @ ip


2

Ci possono essere tre ragioni dietro questo errore.

  1. Stai usando una chiave sbagliata.
  2. La tua chiave non ha le autorizzazioni corrette. Devi modificarlo a 400.
  3. Stai utilizzando l'utente sbagliato. Le immagini di Ubuntu hanno un ubuntu di utente , l'AMI di Amazon è un utente ec2 e le immagini di Debian hanno root o admin

2

Il problema per me era che il mio file .pem era in una delle mie partizioni NTFS. L'ho spostato nella mia partizione Linux (ext4).

Ha ottenuto le autorizzazioni necessarie eseguendo:

chmod 400 my_file.pem

E ha funzionato.


2

Bene, guardando la descrizione del tuo post sento che ci sono stati 2 errori fatti da te: -

  1. Impostare le autorizzazioni corrette per la chiave privata . Il comando seguente dovrebbe aiutarti a impostare la corretta autorizzazione del file.

    chmod 0600 mykey.pem

  2. Utente ec2 errato che si sta tentando di accedere .

    Guardando il tuo registro di debug penso che tu abbia generato un'istanza di Linux di Amazon. L'utente predefinito per quel tipo di istanza è ec2-user. Se l'istanza fosse stata Ubuntu, lo sarebbe stato l'utente predefinito ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

fonte: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html


1

Elenco di controllo:

  1. Stai usando il giusto file .pem della chiave privata?

  2. Le sue autorizzazioni sono impostate correttamente? (Le mie AMI a marchio Amazon funzionano con 644, ma Red Hat deve essere almeno 600 o 400. Non so di Ubuntu.)

  3. Stai usando il nome utente giusto nella tua linea ssh? Amazon-branded = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". L'utente può essere specificato come "ssh -i nome utente pem @ nome host" OPPURE "ssh -l nome utente -i nome host pem"


1

Basta cambiare l'autorizzazione del file pem su 0600 consentendo solo all'utente autorizzato e funzionerà come per incanto.

sudo chmod 0600 myfile.pem

E poi prova a ssh funzionerà perfettamente.

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

L'autorizzazione BY predefinita non consente la chiave pem. Devi solo cambiare l'autorizzazione:

chmod 400 xyz.pem

e se l'istanza ubuntu si connette usando:

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


1

Il file chiave non deve essere visualizzabile pubblicamente, quindi utilizzare l'autorizzazione 400

chmod 400 keyfile.pem

Se il comando precedente mostra l'errore di autorizzazione, utilizzare

sudo chmod 400 keyfile.pem

Ora ssh nella macchina ec2, se il problema persiste , usa ec2-user

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

.400 lo protegge rendendolo di sola lettura e solo per il proprietario.
Puoi trovare la risposta dalla guida ASW.

chmod 400 yourPrivateKey.pem

inserisci qui la descrizione dell'immagine


0

Di seguito sono riportati i semplici passaggi per l'utente Linux per connettersi al server utilizzando il file .pem:

Passaggio 1: nella posizione del file pem e copiarlo nella posizione home .ssh.

cp example.pem ~/.ssh/example.pem

Passaggio 2: modifica l'autorizzazione

chmod 400 ~/.ssh/example.pem

Passaggio 3: eseguire il comando seguente

ssh -i ~/.ssh/example.pem ec2-user@host.com

Poiché questo comando è troppo lungo, è possibile creare l'alias di questo utilizzando i seguenti comandi:

 vim ~/.bashrc

Scrivi lo stesso comando nel modo seguente alla fine.

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

Ora riavvia il tuo sistema e usalo sshConnectper connetterti al tuo server.


0

È solo un problema di autorizzazione con la tua chiave pem aws.

Basta cambiare l'autorizzazione della chiave pem su 400 usando il comando seguente.

chmod 400 pemkeyname.pem

Se non si dispone dell'autorizzazione per modificare l'autorizzazione di un file, è possibile utilizzare sudo come il comando seguente.

sudo chmod 400 pemkeyname.pem

Spero che funzioni bene.


0

Ho visto due ragioni dietro questo problema

1) la chiave di accesso non dispone dell'autorizzazione corretta. le chiavi pem con autorizzazione predefinita non sono autorizzate a stabilire una connessione sicura. Devi solo cambiare l'autorizzazione:

chmod 400 xyz.pem

2) Controlla anche se hai effettuato l'accesso con le credenziali utente appropriate. Altrimenti, usa sudo durante la connessione

sudo ssh -i {keyfile} ec2-user @ {indirizzo ip dell'host remoto}


0

La chiave non deve essere visualizzabile pubblicamente affinché SSH funzioni. Utilizzare questo comando se necessario:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Esempio:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

Per favore ignora questa risposta se è irrilevante per te, ma dalla mia esperienza ho visto persone che hanno un problema Permission denied (publickey)perché hanno semplicemente incollato la loro chiave pubblica (su una macchina target) senza la prima lettera !

Questo accade quando si utilizza vim per modificare (incollare) la chiave. Poiché vim per impostazione predefinita si apre in modalità di comando (non in modalità di inserimento ), incollare la chiave senza passare a una modalità di inserimento (ad es. i) Comporterà il salto della prima slettera, ad es. Invece di

ssh-rsa <key>

finisci per incollare

sh-rsa <key>

Quindi, prima di provare altre soluzioni, vedi se hai incollato correttamente la chiave ! vale a dire

cat ~/.ssh/id_rsa.pub

Solo se sei sicuro, esegui i passaggi successivi; provare a ssh in modalità dettagliata (es. flag -v) potrebbe indicare il problema reale:

ssh -v -i <private_key> <name>@<ip> -p <port>

Come nota a margine, come è già stato menzionato qui da altri, nella maggior parte dei casi l'avvio di un agente ssh vuoto (programma che mantiene le chiavi in ​​memoria) e l'aggiunta della chiave dovrebbe risolvere il problema:

ssh-agent bash
ssh-add <private_key>

-1

Ciò che ha risolto questo problema per me è stato spostare il file .pem nella directory delle app. Quindi dire che fooapp è il nome della mia app. L'ho messo direttamente lì.


-2

A volte potrebbe esserci un errore nella cartella. Non so perché...

Puoi cambiare la cartella e riprovare. Ad esempio, puoi sperimentare nelle solite cartelle (desktop, download, ecc.).

Ho provato questo metodo e ho funzionato


-2

Questo errore è solo a causa dell'autorizzazione.

Basta dare il permesso 400

#chmod 400 pemfilepath


permesso troppo aperto. cattivo!!
sheelpriy,
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.