Was ist die richtige Dateiberechtigung für eine .pem-Datei für SSH und SCP?

69

Ich habe versucht, eine SSH-Verbindung zu meinem AWS Ubuntu-Server herzustellen und das Verzeichnis auf meinen lokalen Computer zu kopieren. Während des gesamten Vorgangs treten verschiedene Dateiberechtigungsfehler auf (siehe unten).

Gibt es eine bestimmte Dateiberechtigung für die .pem-Datei, die es mir ermöglicht, SSH und SCP auszuführen?
Oder muss ich die Dateiberechtigung zweimal ändern - einmal für SSH und einmal für SCP, nachdem ich mich angemeldet habe?

Hier sind die Befehle, die ich benutze:

SSH:

ssh -i sentiment.pem [email protected]

Kopieren von Remote auf lokalen Computer mit:

scp [email protected]:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal

Ich arbeite auf einem Mac OS X 10.7.5.


Versuch und Irrtum:

1.) Nachdem ich die .pem-Datei zum ersten Mal heruntergeladen hatte, wurden die Berechtigungen auf I THINK: 0644 gesetzt

-rw-r - r - @ 1 Toga-Mitarbeiter 1692 18. Februar 21:27 sentiment.pem

Ich habe dann versucht, über Terminal SSH und Folgendes erhalten:

WARNING: UNPROTECTED PRIVATE KEY FILE! 
Permissions 0644 for 'sentiment.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: sentiment.pem
Permission denied (publickey).

2.) Ich habe die Dateiberechtigungen aktualisiert auf: chmod 660 sentiment.pem

Nach dem Update wurden die Berechtigungen auf Folgendes festgelegt:

-rw-rw ---- @ 1 Toga-Mitarbeiter 1692 18. Februar 21:27 sentiment.pem

Ich habe dann versucht, über Terminal SSH und Folgendes erhalten:

WARNING: UNPROTECTED PRIVATE KEY FILE! 
Permissions 0660 for 'sentiment.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: sentiment.pem
Permission denied (publickey).

3.) Ich habe die Dateiberechtigungen aktualisiert auf: chmod 600 sentiment.pem

Nach dem Update wurden die Berechtigungen auf Folgendes festgelegt:

-rw ------- @ 1 Toga-Mitarbeiter 1692 18. Februar 21:27 sentiment.pem

Ich habe dann versucht, über Terminal SSH und war erfolgreich!

4.) Jetzt angemeldet, führe ich den Befehl a aus, um das Remote-Verzeichnis auf meinen lokalen Computer zu kopieren:

scp [email protected]:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal

Welches gibt zurück:

Permission denied (publickey).

Versuchte SCP-Befehle:

1.) fügte den Befehl -i hinzu und verwies auf die .pem-Datei:

scp -i sentiment.pem [email protected]: / home / ubuntu / sentimentfolder / Users / Toga / Desktop / sentimentlocal

2.) fügte den Befehl -i hinzu, verwies auf die .pem-Datei und änderte den Benutzer für AWS in ec2-user:

scp -i sentiment.pem [email protected]: / home / ubuntu / sentimentfolder / Users / Toga / Desktop / sentimentlocal

3.) fügte den Befehl -i hinzu, verwies auf das .pem-File, änderte den Benutzer für AWS in ec2-user und fügte den vollständigen Dateipfad für den Speicherort der .pem-Datei hinzu:

scp -i /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem [email protected]: / home / ubuntu / sentiment / Users / Toga / Desktop / sentimentlocal

George Jester
quelle
Sie müssen scp anweisen, auch die .pem-Datei zu verwenden
daniel kullmann
Danke, dass Sie @ Danielkullmann angerufen haben, das macht Sinn. Ich habe eine Kombination von Befehlen ausprobiert, die direkt auf die .pem-Datei verwiesen, aber es hat noch nichts funktioniert. Ich habe die Frage mit einem Abschnitt mit dem Titel "SCP-Befehle versucht" aktualisiert, um zu katalogisieren, was ich versucht habe. Wenn Sie einen alternativen Befehl haben, lassen Sie es mich bitte wissen. Danke.
George Jester

Antworten:

110

Besuchen Sie hier So stellen Sie über SSH eine Verbindung zu Amazon EC2 über Remotezugriff her, oder lesen Sie unten nach.

So stellen Sie über SSH eine Remote-Verbindung zu Amazon EC2 her:

  1. Laden Sie die PEM-Datei herunter.
  2. Wählen Sie in Amazon Dashboard in der linken Leiste "Instances" aus und wählen Sie dann die Instanz aus, zu der Sie eine Verbindung herstellen möchten.
  3. Klicken Sie auf "Aktionen" und wählen Sie "Verbinden"
  4. Klicken Sie auf "Mit einem eigenständigen SSH-Client verbinden".
  5. Öffnen Sie ein Terminalfenster
  6. Erstellen Sie ein Verzeichnis:

    # mkdir -p ~/.ssh
    
  7. Verschieben Sie die heruntergeladene .pem-Datei in das soeben erstellte .ssh-Verzeichnis:

    # mv ~/Downloads/ec2private.pem ~/.ssh
    
  8. Ändern Sie die Berechtigungen der PEM-Datei so, dass nur der Root-Benutzer sie lesen kann:

    # chmod 400 ~/.ssh/ec2private.pem
    
  9. Erstellen Sie eine Konfigurationsdatei:

    # vim ~/.ssh/config
    

    Geben Sie den folgenden Text in die Konfigurationsdatei ein:

    Host *amazonaws.com
    IdentityFile ~/.ssh/ec2private.pem
    User ec2-user
    

    Speichern Sie diese Datei.

  10. Verwenden Sie den Befehl ssh mit Ihrem öffentlichen DNS-Hostnamen, um eine Verbindung zu Ihrer Instanz herzustellen.
    z.B:

    # ssh ec2-54-23-23-23-34.example.amazonaws.com
    
Babin Lonston
quelle
1
Ich bin gespannt: Warum die Gegenstimme?
Erik
1
Ich habe NICHT dafür gestimmt. Das sieht tatsächlich hilfreich aus, ist sich aber nicht sicher, ob es das Problem lösen wird, wenn ich von der Fernbedienung zu meinem lokalen Computer scp muss. Ich werde es versuchen und sehen, was passiert. Danke Babin.
George Jester
Wenn Sie ein gesamtes Verzeichnis und dessen Inhalt kopieren, verwenden Sie scp -r.
Bahamat
1
Hervorragende Antwort. Um ein Verschieben des PEM zu vermeiden, können Sie das Flag ssh -i verwenden, um den zu verwendenden öffentlichen Schlüssel anzugeben. Beispiel: ssh -i path / to / ec2private.pem ec2-54-23-23-23-34.example.amazonaws.com
Mafro34
15

chmod 400 {keyfile}.pem ist, was Amazon angewiesen hat und es funktioniert.

John Zhang
quelle
Dies ist die Antwort, nach der ich gesucht habe. Alle Anweisungen in der akzeptierten Antwort sind gute Beispiele ... aber für das Problem irrelevant.
Sarink
3

Es scheint, dass Sie nicht die IP-Adresse, sondern den vollständigen Hostnamen des Systems im SCP-Befehl verwenden sollen. In den AWS-Dokumenten wird dies unter http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html im Abschnitt "Übertragen von Dateien auf Linux / Unix-Instanzen von Linux / Unix mit SCP" beschrieben.

Und -rzum Kopieren von Verzeichnissen verwenden.

Beachten Sie, dass der Standardbenutzername für verschiedene Bilder unterschiedlich ist:

Für Amazon Linux lautet der Standardbenutzername ec2-user. Bei RHEL5 ist der Benutzername häufig, kann rootaber auch sein ec2-user. Für Ubuntu lautet der Benutzername ubuntu. Bei SUSE Linux lautet der Benutzername root. Wenden Sie sich andernfalls an Ihren AMI-Anbieter.

Also benutze diesen Befehl:

scp -r -i  /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem [email protected]:~/sentiment /Users/Toga/Desktop/sentimentlocal
Daniel Kullmann
quelle
1
Eine gute Erinnerung für mich, den richtigen Benutzernamen zu verwenden. Erhalten Sie den obigen Fehler und ich musste daran denken, den Ubuntu-Benutzer auf Ubuntu-Instanzen zu verwenden.
md_rasler
2

Die "Berechtigung verweigert (publickey)" stammt vom Remote-Server. Sie verwenden also entweder den falschen Schlüssel, dürfen keine Verbindung herstellen, oder die Datei remote authorized_keys enthält einen Tippfehler.

maedox
quelle
2
chmod 0400 pemfile.pem

und

ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name
harsha konreddy
quelle
3
Bitte erläutern Sie Ihren sshBefehl (und geben Sie, falls möglich, eine Referenz an). Übrigens chmod 400wurde das in einer Antwort vor neun Monaten zur Verfügung gestellt.
Scott