Versuch, SSH in eine Amazon Ec2-Instanz zu übertragen - Berechtigungsfehler

745

Dies ist wahrscheinlich eine dumm einfache Frage an einige :)

Ich habe eine neue Linux-Instanz auf Amazon EC2 erstellt und als Teil davon die PEM-Datei heruntergeladen, damit ich SSH verwenden kann.

Als ich versuchte zu ssh mit:

ssh -i myfile.pem <public dns>

Ich habe:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         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).

Nach diesem Beitrag habe ich versucht, +600 die PEM-Datei zu chmod, aber jetzt, wenn ich ssh, bekomme ich nur:

Permission denied (publickey).

Welchen Schuljungenfehler mache ich hier? Die .pem-Datei befindet sich in meinem Home-Ordner (in osx). Die Berechtigungen sehen folgendermaßen aus:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem
Matt Roberts
quelle
2
Dieser Fehler tritt auch auf, wenn Sie eine falsche PEM-Datei verwenden.
Rahul Prasad
Stellen Sie außerdem sicher, dass Sie Ihre Instanz NACH dem Erstellen erstellt und das Schlüsselpaar als den zu verwendenden Schlüssel ausgewählt haben. Ich habe das umgekehrt gemacht.
Gary
Ich bin in Windows mit WinSCP. Es gibt nichts zu tun mit , chmod 400 myfile.pemwie es verwendet myfile.ppkvon PuTTYgen aus der pem - Datei generiert.
Chetabahana
Dieser Fehler kann auch auftreten, wenn Sie sich nicht mit dem richtigen Benutzer
anmelden

Antworten:

1461

Das Problem ist, dass die Datei einen falschen Mod enthält.

Einfach durch Ausführen gelöst -

chmod 400 mykey.pem

Entnommen aus den Anweisungen von Amazon -

Ihre Schlüsseldatei darf nicht öffentlich sichtbar sein, damit SSH funktioniert. Verwenden Sie diesen Befehl bei Bedarf: chmod 400 mykey.pem

400 schützt es, indem es nur für den Eigentümer lesbar gemacht wird.

Kof
quelle
3
Vielen Dank! Was macht chmod 400? zu mykey.pem?
Costa
19
400 schützt es, indem es nur für den Eigentümer lesbar gemacht wird.
Kof
1
Danach erhalte ich "Warnung: Identitätsdatei blabla.pem nicht zugänglich: Keine solche Datei oder kein solches Verzeichnis", wenn ich ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host mache.
coolcool1994
3
Dieser Befehl + hat ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPdas Problem behoben. Vielleicht sollte dies die akzeptierte Antwort sein ...
c4k
1
Wie kann ich dasselbe für Windows ausführen?
Ahsan Mukhtar
262

Sie verwenden wahrscheinlich den falschen Benutzernamen, um sich anzumelden:

  • Die meisten Ubuntu-Bilder haben einen Benutzer ubuntu
  • Amazon AMI ist ec2-user
  • Die meisten Debian-Bilder haben entweder rootoderadmin

Um sich anzumelden, müssen Sie Ihren ssh-Befehl anpassen:

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

HTH

Bis
quelle
30
oder ssh -i key.pem ubuntu @
servername
43
Die Fehlermeldung sagt alles: Die PEM-Zertifikatdatei ist nicht ausreichend geschützt. Führen Sie chmod 400 xyz.pem wie unten vorgeschlagen aus.
Allprog
1
@allprog für mich bedeutet dies nur, dass es sagt Permission denied (publickey).und nichts anderes ...
Aram Kocharyan
1
Ich habe das Problem gefunden - ich habe nicht denselben Schlüssel verwendet, mit dem ich die Instanz erstellt habe
Aram Kocharyan
12
Dies ist nicht die Lösung - die Dateiberechtigungen für die heruntergeladene Schlüsseldatei sind standardmäßig 844. sollte 400 sein chmod 500 <path_to_pem_file>sollte es tun.
Elad Meidar
62

Ich weiß, das ist sehr spät im Spiel ... aber das funktioniert immer für mich:

Schritt 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

Schritt 2, einfach ssh in :)

ssh user_name@<instance public dns/ip>

z.B

ssh [email protected]

hoffe das hilft jemandem.

user2838357
quelle
Ist "ssh-add" dasselbe wie das Kopieren der * .pem-Datei in den Ordner ~ / .ssh?
ス レ ッ ク ス
1
>> nur * .pem-Datei in ~ / .ssh-Ordner kopieren Ist nicht dasselbe, müssen Sie zum Ordner hinzufügen und dann den Befehl ssh-add ausführen.
Super_P
Sehr spät zum Spiel, aber um einige Klarstellungen hinzuzufügen ... 1. Fügen Sie die .pem-Datei zum Verzeichnis ~ / .ssh hinzu (erstellen Sie sie gegebenenfalls), 2. Verwenden Sie den Befehl ssh-add, um der Authentifizierung die Identität hinzuzufügen Agent; Dies bedeutet, dass Sie die .pem-Datei niemals angeben müssen, wenn Sie ssh
Ian Atkin
2
Nach ssh-add ¬ / .ssh / key.pem; Fehler erhalten Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden. eval ssh-agent -sberichtet SSH_AGENT_PID = 3409; ssh-add gibt den gleichen Fehler wie oben ......... Jede Hilfe hier plz
Tariq
Wow, das wäre sehr praktisch für alle meine zukünftigen Verbindungen zu meinem VPS. Danke Kumpel :)
Ahmad Mushtaq
36

Ok Mann, das einzige was für mich funktioniert hat war:

  1. Ändern Sie die Berechtigungen des Schlüssels

    chmod 400 mykey.pem

  2. Stellen Sie sicher, dass Sie sich mit ec2-user und der richtigen ec2-99 ... -Adresse anmelden. Die ec2-99-Adresse befindet sich unten in der aws-Konsole, wenn Sie angemeldet sind und Ihre Instanz aufgelistet ist

    ssh -i mykey.pem [email protected]

Bobobobo
quelle
Ich kann die Adresse ec2-99 nicht finden. Kannst du mir bitte helfen?
Adil Malik
1
chmod 400 mykey.pem Login mit Ubuntu wie folgt: ssh -i mykey.pem [email protected]
Gal Bracha
27

Schauen Sie sich diesen Artikel an . Sie verwenden nicht das öffentliche DNS, sondern das Formular

ssh -i your.pem [email protected]

wo der Name auf Ihrem AMI-Panel sichtbar ist

Renick
quelle
Prost auf den Artikel, sehr nützlich!
Matt Roberts
geringfügige Verbesserung: Wenn Sie versuchen, sich als root aws anzumelden, wird Folgendes angezeigt: "Bitte melden Sie sich als ec2-Benutzer und nicht als root an."
Andre Schweighofer
Wie finde ich heraus, was mein ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com ist?
ス レ ッ ク ス
Verwaltungskonsole> EC2> Instanzen und wählen Sie Ihre Instanz aus.
Renick
Das 'root @' ist das, was allen anderen in dieser Antwort fehlt. Ihre geholfen! Das und chmod.
Lord B8r
13

In Windows können Sie zu den Eigenschaften der PEM-Datei gehen, zur Registerkarte Sicherheit und dann zur Schaltfläche Weiter.

Vererbung und alle Berechtigungen entfernen. dann gib dir die volle Kontrolle. Immerhin gibt Ihnen SSL nicht wieder den gleichen Fehler.

Nadeeshan Herath
quelle
7

Ich weiß, dass diese Frage bereits beantwortet wurde, aber für diejenigen, die sie alle ausprobiert haben und Sie immer noch die nervige "Erlaubnis verweigert (publickey)" erhalten. Versuchen Sie, Ihren Befehl mit SUDO auszuführen. Natürlich ist dies eine vorübergehende Lösung, und Sie sollten die Berechtigungen korrekt festlegen, aber zumindest können Sie so feststellen, dass Ihr aktueller Benutzer nicht mit den erforderlichen Berechtigungen ausgeführt wird (wie Sie angenommen haben).

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

Sobald Sie dies tun, erhalten Sie eine Nachricht wie folgt:

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

Welches ist auch spärlich dokumentiert. In diesem Fall machen Sie einfach Folgendes:

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

Und du wirst das Herrliche bekommen:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|
Ricardo Cid
quelle
2
Vielen Dank. Ich habe immer noch eine Fehlermeldung erhalten, nachdem ich alle oben genannten Optionen ausprobiert habe. SSh mit sudo laufen zu lassen hat bei mir funktioniert.
Gursharan Singh
Ich würde gerne wissen, warum ich das in sudo ausführen muss. Ich habe versucht, chmod 400 xyz.pem, aber es hat nicht geholfen.
Samuel Dominguez
6

Im Mac-Terminal hat es mir nicht geholfen, "chmod 400 xyz.pem" zu machen. Es wurde immer wieder gesagt, dass die Erlaubnis verweigert wurde. Für Ubuntu-Benutzer würde ich vorschlagen

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem [email protected] (Beachten Sie, dass der Benutzer Ubuntu ist)
Himalaya Majumdar
quelle
4

Best Practices für SSH-Schlüssel und Dateiberechtigungen:

  • .ssh-Verzeichnis - 0700 (nur vom Eigentümer)
  • privater Schlüssel / .pem-Datei - 0400 (schreibgeschützt vom Eigentümer)
  • öffentlicher Schlüssel / .pub-Datei - 0600 (nur vom Eigentümer lesen und schreiben)

    chmod XXXX file/directory

Ryan
quelle
3

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

Ich denke, das liegt daran, dass Sie entweder falsche Anmeldeinformationen eingegeben haben oder einen öffentlichen Schlüssel anstelle eines privaten Schlüssels verwenden oder dass Ihre Portberechtigungen für ALLE für ssh offen sind. Das ist schlecht für Amazon.

Syed Priom
quelle
3

Alternative Anmeldung mit PuTTY. Es ist gut, braucht aber ein paar Schritte.

  1. Holen Sie sich Ihr .pem, das beim ersten Erstellen der EC2-Instanz generiert wurde.
  2. Konvertieren Sie die .pem-Datei .ppk mit PuttyGen, da PuTTY .pem nicht liest.
  3. Öffnen Sie PuTTY und geben Sie Ihren Hostnamen , die + Public DNS (Bsp. [email protected]) Instanz Benutzername ist. Nicht der Benutzername Ihres AWS-Kontos.
  4. Navigieren Sie dann zu Verbindung> SSH> Authentifizierung . Fügen Sie dann Ihre PPK- Datei hinzu. Klicken Sie auf Durchsuchen, wo "Private Schlüsseldatei zur Authentifizierung" steht .
  5. Klicken Sie auf Öffnen und Sie sollten sofort in der Lage sein, eine Verbindung herzustellen.

Ich benutze PuTTY 0.66 in Windows.

jarvis
quelle
Dies funktioniert, aber gibt es eine Möglichkeit, die SSH-Verbindung direkt über die Befehlszeile herzustellen?
Ariel
3

Zusätzlich zu den anderen Antworten habe ich Folgendes getan, damit dies funktioniert:

  • Kopieren Sie den Schlüssel in den Ordner .ssh, falls Sie dies noch nicht getan haben:

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

  • Geben Sie dem Schlüssel die richtigen Berechtigungen

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Fügen Sie dann den Schlüssel hinzu

ssh-add ~/.ssh/key.pem

Jetzt sollten Sie in der Lage sein, EC2 zu ssh (:

Rodrigo Nantes
quelle
2

Führen Sie eine chmod 400 yourkeyfile.pem aus. Wenn Ihre Instanz Amazon Linux ist, verwenden Sie ssh -i yourkeyfile.pem ec2-user @ ip für ubuntu ssh -i yourkeyfile.pem ubuntu @ ip für centos ssh -i yourkeyfile.pem centos @ ip

sathee005
quelle
2

Dieser Fehler kann drei Gründe haben.

  1. Sie verwenden einen falschen Schlüssel.
  2. Ihr Schlüssel verfügt nicht über die richtigen Berechtigungen. Sie müssen es auf 400 ändern.
  3. Sie verwenden den falschen Benutzer. Ubuntu-Images haben einen Benutzer Ubuntu , Amazon AMI ist ec2-Benutzer und Debian- Images haben entweder root oder admin
Jagatveer Singh
quelle
2

Das Problem für mich war, dass sich meine PEM-Datei in einer meiner NTFS-Partitionen befand. Ich habe es auf meine Linux-Partition (ext4) verschoben.

Erforderliche Berechtigungen durch Ausführen von:

chmod 400 my_file.pem

Und es hat funktioniert.

Rishabh Agrahari
quelle
2

Wenn ich mir Ihre Beitragsbeschreibung ansehe, habe ich das Gefühl, dass Sie zwei Fehler gemacht haben:

  1. Legen Sie die richtigen Berechtigungen für den privaten Schlüssel fest . Der folgende Befehl soll Ihnen helfen, die richtige Dateiberechtigung festzulegen.

    chmod 0600 mykey.pem

  2. Falscher ec2-Benutzer, den Sie anmelden möchten .

    Wenn Sie sich Ihr Debug-Protokoll ansehen, haben Sie wahrscheinlich eine Amazon Linux-Instanz erstellt. Der Standardbenutzer für diesen Instanztyp ist ec2-user. Wenn die Instanz Ubuntu gewesen wäre, wäre Ihr Standardbenutzer gewesen 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.

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

Prabuddha Chakraborty
quelle
1

Checkliste:

  1. Verwenden Sie die richtige PEM-Datei mit privatem Schlüssel?

  2. Sind die Berechtigungen richtig eingestellt? (Meine AMIs der Marke Amazon funktionieren mit 644, aber Red Hat muss mindestens 600 oder 400 sein. Ich weiß nichts über Ubuntu.)

  3. Verwenden Sie den richtigen Benutzernamen in Ihrer SSH-Zeile? Amazon-branded = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". Der Benutzer kann als "ssh -i pem Benutzername @ Hostname" ODER "ssh -l Benutzername -i pem Hostname" angegeben werden.

fivedogit
quelle
1

Ändern Sie einfach die Berechtigung der PEM-Datei in 0600, wobei nur der zulässige Benutzer berücksichtigt wird, und es funktioniert wie ein Zauber.

sudo chmod 0600 myfile.pem

Und dann versuchen Sie zu ssh, es wird perfekt funktionieren.

ssh -i myfile.pem <<ssh_user>>@<<server>>
Prash
quelle
1

Standardmäßig erlauben Berechtigungen den PEM-Schlüssel nicht. Sie müssen nur die Berechtigung ändern:

chmod 400 xyz.pem

und wenn Ubuntu-Instanz, dann verbinden mit:

ssh -i xyz.pem [email protected]

rahul kumar
quelle
1

Die Schlüsseldatei sollte nicht öffentlich sichtbar sein. Verwenden Sie daher die Berechtigung 400

chmod 400 keyfile.pem

Wenn der obige Befehl den Berechtigungsfehler anzeigt, verwenden Sie

sudo chmod 400 keyfile.pem

Verwenden Sie jetzt ssh in der ec2-Maschine. Wenn Sie immer noch mit dem Problem konfrontiert sind , verwenden Sie ec2-user

ssh -i keyfile.pem [email protected]

singh30
quelle
1

.400 schützt es, indem es schreibgeschützt und nur für den Eigentümer ist.
Die Antwort finden Sie im ASW-Handbuch.

chmod 400 yourPrivateKey.pem

Geben Sie hier die Bildbeschreibung ein

Zgpeace
quelle
0

Im Folgenden sind die einfachen Schritte aufgeführt, mit denen Linux-Benutzer mithilfe der PEM-Datei eine Verbindung zum Server herstellen können:

Schritt 1: Gehen Sie zum Speicherort der PEM-Datei und kopieren Sie sie in den Speicherort .ssh.

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

Schritt 2: Ändern Sie die Berechtigung

chmod 400 ~/.ssh/example.pem

Schritt 3: Führen Sie den folgenden Befehl aus

ssh -i ~/.ssh/example.pem [email protected]

Da dieser Befehl zu lang ist, sollten Sie den Alias ​​mit folgenden Befehlen erstellen:

 vim ~/.bashrc

Schreiben Sie den gleichen Befehl zuletzt wie folgt.

alias sshConnect='ssh -i ~/.ssh/example.pem [email protected]'

Starten Sie nun Ihr System neu und stellen Sie sshConnecteine Verbindung zu Ihrem Server her.

Ajai
quelle
0

Es ist nur ein Berechtigungsproblem mit Ihrem aws pem-Schlüssel.

Ändern Sie einfach die Berechtigung des PEM-Schlüssels mit dem folgenden Befehl in 400.

chmod 400 pemkeyname.pem

Wenn Sie nicht berechtigt sind, die Berechtigung einer Datei zu ändern, können Sie sudo wie den folgenden Befehl verwenden.

sudo chmod 400 pemkeyname.pem

Ich hoffe das sollte gut funktionieren.

Deepak N.
quelle
0

Ich habe zwei Gründe für dieses Problem gesehen

1) Der Zugriffsschlüssel hat nicht die richtige Berechtigung. PEM-Schlüssel mit Standardberechtigung dürfen keine sichere Verbindung herstellen. Sie müssen nur die Berechtigung ändern:

chmod 400 xyz.pem

2) Überprüfen Sie auch, ob Sie sich mit den richtigen Benutzeranmeldeinformationen angemeldet haben. Verwenden Sie andernfalls sudo, während Sie eine Verbindung herstellen

sudo ssh -i {Schlüsseldatei} ec2-user @ {IP-Adresse des Remote-Hosts}

Abhijit Barua
quelle
0

Ihr Schlüssel darf nicht öffentlich sichtbar sein, damit SSH funktioniert. Verwenden Sie diesen Befehl bei Bedarf:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

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

Beispiel:

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

Bitte ignorieren Sie diese Antwort, wenn sie für Sie irrelevant ist, aber meiner Erfahrung nach habe ich Leute gesehen, mit denen ein Problem Permission denied (publickey)aufgetreten ist, weil sie einfach ihren öffentlichen Schlüssel (auf einem Zielcomputer) ohne den ersten Buchstaben eingefügt haben !

Dies geschieht, wenn Sie den Schlüssel mit vim bearbeiten (einfügen). Da vim standardmäßig im Befehlsmodus geöffnet wird (nicht in einem Einfügemodus ), führt das Einfügen der Taste ohne Umschalten in einen Einfügemodus (dh i) dazu, dass der erste sBuchstabe übersprungen wird , z. B. anstelle von

ssh-rsa <key>

Sie am Ende einfügen

sh-rsa <key>

Bevor Sie andere Lösungen ausprobieren, prüfen Sie , ob Sie Ihren Schlüssel richtig eingefügt haben ! dh

cat ~/.ssh/id_rsa.pub

Führen Sie die nächsten Schritte nur aus, wenn Sie sicher sind. Wenn Sie versuchen, in einem ausführlichen Modus (z. B. Flag -v) zu ssh, weisen Sie möglicherweise auf das eigentliche Problem hin:

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

Nebenbei bemerkt, wie bereits von anderen erwähnt, sollte das Problem in den meisten Fällen durch Starten eines leeren SSH-Agenten (Programm, das Ihre Schlüssel im Speicher behält) und Hinzufügen Ihres Schlüssels behoben werden:

ssh-agent bash
ssh-add <private_key>
Tomasz Bartkowiak
quelle
-1

Was dies für mich behoben hat, war das Verschieben der PEM-Datei in das Apps-Verzeichnis. Also sag fooapp ist der Name meiner App. Ich habe es direkt dort platziert.

Nick Res
quelle
-2

Manchmal liegt möglicherweise ein Fehler im Ordner vor. Keine Ahnung warum...

Sie können den Ordner ändern und es erneut versuchen. Sie können beispielsweise in den üblichen Ordnern (Desktop, Downloads usw.) experimentieren.

Ich habe diese Methode ausprobiert und gearbeitet

Rustem Hesenov
quelle
-2

Dieser Fehler ist nur auf Erlaubnis zurückzuführen.

Geben Sie einfach die Erlaubnis 400

#chmod 400 pemfilepath

Viraj Wadate
quelle
Erlaubnis zu offen. Schlecht!!
Sheelpriy