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

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.


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


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 ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

hoffe das hilft jemandem.


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 ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


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 ubuntu@SERVER.amazonaws.com
Gal Bracha

27

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

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

wo der Name auf Ihrem AMI-Panel sichtbar ist


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.


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
  ___|\___|___|

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 ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (Beachten Sie, dass der Benutzer Ubuntu ist)

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


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.


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. Ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com) 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.


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 (:


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


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

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.


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


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.


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>>

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 ubuntu@ec2-youraws.amazonaws.com


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 ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


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


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 ec2-user@host.com

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 ec2-user@host.com'

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


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.


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}


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

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>

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


-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


-2

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

Geben Sie einfach die Erlaubnis 400

#chmod 400 pemfilepath


Erlaubnis zu offen. Schlecht!!
Sheelpriy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.