AWS SSH-Zugriff 'Berechtigung verweigert (öffentlicher Schlüssel)' Problem [geschlossen]

284

Wie kann ich über ssh eine Verbindung zu einer AWS-Instanz herstellen?

Ich habe:

  1. Bei AWS angemeldet;
  2. Erstellt einen öffentlichen Schlüssel und ein Zertifikat auf der AWS-Website und speichert sie auf der Festplatte.
  3. Ging zu meiner Konsole und erstellte Umgebungsvariablen:

    $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/
    $ export EC2_CERT=/home/default/aws/cert-EBAINCRNWHDSCWWIHSOKON2YWGJZ5LSQ.pem
    $ export EC2_PRIVATE_KEY=/home/default/aws/pk-EBAINCRNWHDSCWWIHSOKON2YWGJZ5LSQ.pem
    
  4. Hat AWS API angewiesen, dieses Schlüsselpaar zu verwenden, und das Schlüsselpaar in einer Datei gespeichert:

    $ ec2-add-keypair ec2-keypair > ec2-keypair.pem
    
  5. Startete eine AWS Ubuntu 9-Instanz mit diesem Schlüsselpaar:

    $ ec2-run-instances ami-ed46a784 -k ec2-keypair
    
  6. Es wurde versucht, eine SSH-Verbindung zur Instanz herzustellen:

    $ ssh -v -i ec2-keypair.pem [email protected]
    OpenSSH_5.1p1 Debian-5ubuntu1, OpenSSL 0.9.8g 19 Oct 2007
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug1: Connecting to ec2-174-129-185-190.compute-1.amazonaws.com [174.129.185.190] port 22.
    debug1: Connection established.
    debug1: identity file ec2-keypair.pem type -1
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5ubuntu1
    debug1: match: OpenSSH_5.1p1 Debian-5ubuntu1 pat OpenSSH*
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_5.1p1 Debian-5ubuntu1
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-cbc hmac-md5 none
    debug1: kex: client->server aes128-cbc hmac-md5 none
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug1: Host 'ec2-174-129-185-190.compute-1.amazonaws.com' is known and matches the RSA host key.
    debug1: Found key in /home/default/.ssh/known_hosts:11
    debug1: ssh_rsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey
    debug1: Next authentication method: publickey
    debug1: Trying private key: ec2-keypair.pem
    debug1: read PEM private key done: type RSA
    debug1: Authentications that can continue: publickey
    debug1: No more authentication methods to try.
    Permission denied (publickey).
    

    Was könnte das Problem sein und wie kann es funktionieren?

Alex
quelle
2
Ironischerweise verwende ich "root" als Benutzernamen, aber "ubuntu" (was Sie erwähnt haben) ist der richtige Name für mein AMI und ich danke Ihnen für Ihren Beitrag!
Realjin

Antworten:

512

Für Ubuntu-Instanzen:

chmod 600 ec2-keypair.pem
ssh -v -i ec2-keypair.pem [email protected]

In anderen Fällen müssen Sie möglicherweise ec2-useranstelle von verwenden ubuntu.

Bei den meisten von mir verwendeten EC2-Linux-Images wurde standardmäßig nur der Root-Benutzer erstellt.

Siehe auch: http://www.youtube.com/watch?v=WBro0TEAd7g

sipwiz
quelle
6
Du rockst! So verdammt einfach!
Alex
50
Sie können auch ssh-add ec2-keypair.pem verwenden, um die Option -i
AdamK
12
Wenn Sie root ausprobieren und "Bitte melden Sie sich als ec2-Benutzer anstatt als root-Benutzer an" erhalten, verwenden Sie ec2-user anstelle von root.
Tony
8
Und einige Ubuntu-Bilder scheinen nur den Benutzer "Ubuntu" zu haben. (Was zu Wurzel sudo kann.)
Prof. Falken Vertrag verletzt
1
Super, super nützlich.
NSCoder
93

Jetzt ist es:

ssh -v -i ec2-keypair.pem ec2-user@[yourdnsaddress]
SSH
quelle
Vielen Dank. Ich habe ewig gebraucht, um das herauszufinden - es wird in den Verbindungsinformationen von der Konsole nicht erwähnt! Es sagt Ihnen, wann Sie versuchen, root zu verwenden, aber ich dachte, ec2-user ist ein Verweis auf meinen Benutzernamen. Doh!
Adrian Mouat
1
Oh Mann. Kein Leckerbissen zu finden. Vielen Dank!
Vroomfondel
danke, nicht einfach, um diesen zu finden
Sehr gut! Danke dir!
Diana
46

In den Veröffentlichungen von Canonical wird standardmäßig der Benutzer "Ubuntu" für alle Benutzer verwendet, die hier mit einem Ubuntu-Image landen, bei dem das gleiche Problem auftritt.

Bryon
quelle
2
Es ist nicht leicht, das herauszufinden.
Gustav
17

Wenn Sie ein Bitnami-Bild verwenden, melden Sie sich als 'bitnami' an.

Scheint offensichtlich, aber etwas, das ich übersehen habe.

akim
quelle
Ihre Antwort hat mir den Tag gerettet!
Surya
2
Meintest du? Seems <sarcasm>obvious</sarcasm>
Bob Stein
Bitnami-Anweisungen , einschließlich des Findens der Datenbankkennwörter.
Bob Stein
8

Für meine Ubuntu-Bilder ist es tatsächlich ein Ubuntu-Benutzer und NICHT der ec2-Benutzer;)

Dean Hiller
quelle
5

Ubuntu 10.04 mit openSSH

Dies ist die genaue Verwendung:

ssh -v -i [yourkeypairfile] ec2-user@[yourdnsaddress]

beispielsweise:

ssh -v -i GSG_Keypair.pem [email protected]

Das obige Beispiel stammt direkt aus dem AWS-Lernprogramm für die Verbindung mit einem Linux / UNIX-Computer unter: http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/

Carl Crott
quelle
Mit dem Schalter ssh -i können wir nur die PEM-Datei verwenden.
ABHAY JOHRI
5

Es wird sich auch beschweren, wenn die PEM-Dateiberechtigungen zu offen sind. chmod die Datei auf 600, um das zu beheben.

Allan Bogh
quelle
Vielen Dank für diesen Tipp - hat mir sehr geholfen
Billy Moon
4
Für Anfänger .. der Befehl, dies zu tun, wäre:chmod 600 your_file.pem
dano
5

Ich bin auch darauf gestoßen - es stellte sich heraus, dass ich ein von der Community erstelltes AMI verwendet habe - und der Standardbenutzername war niehter root, noch war es ect-user oder ubuntu. Tatsächlich hatte ich keine Ahnung, was es war - bis ich ' root ' versuchte und der Server mich freundlich bat, mich als xxx anzumelden, wobei xxx das ist, was es Ihnen sagt.

-Prost!

kevinfoundananswwer
quelle
4

Sie müssen Ihren privaten Schlüssel auf Ihrem lokalen Computer haben

Sie müssen die IP-Adresse oder den DNS-Namen Ihres Remote-Computers oder Servers kennen. Diese können Sie über die AWS-Konsole abrufen

Wenn Sie ein Linux-Benutzer sind

  • Stellen Sie sicher, dass die Berechtigungen für den privaten Schlüssel 600 ( chmod 600 <path to private key file>) sind.
  • Stellen Sie mit ssh ( ssh -i <path to private key file> <user>@<IP address or DNS name of remote server>) eine Verbindung zu Ihrem Computer her

Wenn Sie ein Windows-Benutzer sind

  • Verwenden Sie PuTTy, um die SSH-Sitzung zu erstellen ( http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.66-installer.exe ).
  • Wenn Ihre private Schlüsseldatei im PEM-Format vorliegt, konvertieren Sie sie mit puttygen in .ppk
  • Starten Sie PuTTy, legen Sie die ppk-Datei, die IP-Adresse oder den DNS-Namen des Remote-Servers fest und starten Sie die ssh-Sitzung
Vineeth Guna
quelle
Ändern Sie die Berechtigung der Datei mit chmod 400 <pem key>
Vaibhav Jain
3

verwenden...

# chmod 400 ec2-keypair.pem

Verwenden Sie nicht die Berechtigung 600, da Sie sonst Ihren Schlüssel möglicherweise versehentlich überschreiben.

x1b2j
quelle
2

das hat bei mir funktioniert:

ssh-keygen -R <server_IP>

Das Löschen der auf der Workstation gespeicherten alten Schlüssel funktioniert auch mit statt

dann das gleiche ssh wieder machen es hat funktioniert:

ssh -v -i <your_pem_file> ubuntu@<server_IP>

In Ubuntu-Instanzen lautet der Benutzername: Ubuntu unter Amazon Linux AMI. Der Benutzername lautet: ec2-user

Ich musste die Instanz nicht aus einem Image neu erstellen.

Krise
quelle
2

Für Debian EC2-Instanzen ist der Benutzer admin.

Alastair Irvine
quelle
2

Es müssen 2 Schritte verbunden werden:

Chmod 400 auf Ihrem privaten Schlüssel, so können die anderen nicht auf Ihren Schlüssel zugreifen:

chmod 400 toto.pem

Um eine Verbindung zu Ihrer Instanz in SSH herzustellen, müssen Sie die öffentliche IP-Adresse Ihrer Instanz kennen:

ssh -i toto.pem [email protected]

Ich hoffe es hilft !

GuillaumeAgis
quelle
1

Wenn Sie EBS verwenden, können Sie auch versuchen, das EBS-Volume auf einer laufenden Instanz bereitzustellen. Mounten Sie es dann auf dieser laufenden Instanz und sehen Sie, was in / home los ist. Sie können Dinge sehen, wie ist der Benutzer Ubuntu oder Ec2-Benutzer? oder hat es die richtigen öffentlichen Schlüssel unter ~ / .ssh / authorized_keys

Rico
quelle
1

Erlaubnis für ec2-keypair.pemsollte sein400

chmod 400 ec2-keypair.pem

Yogi
quelle
1

Wenn Sie ein AWS-Image von Bitnami ausführen. Der Benutzername wäre bitnami. Prost!

Sehen Sie sich mein Debug an und schauen Sie sich das letzte an:

* *

ssh -v -i awsliferaysrta.pem.txt [email protected].***
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 54.254.250.*** [54.254.250.***] port 22.
debug1: Connection established.
debug1: identity file awsliferaysrta.pem.txt type -1
debug1: identity file awsliferaysrta.pem.txt-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 05:5c:78:45:c9:39:3a:84:fe:f8:19:5d:31:48:aa:5f
debug1: Host '54.254.250.***' is known and matches the RSA host key.
debug1: Found key in /Users/macbookpro/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: awsliferaysrta.pem.txt
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to 54.254.250.*** ([54.254.250.***]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Remote: Port forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Forced command.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
Please login as the user "bitnami" rather than the user "root".

* *

Hung Do.
quelle
1

In meinem Fall (Mac OS X) war das Problem der Unterbrechungstyp der Datei. Versuche dies:

1.- Öffnen Sie die PEM-Datei mit TextWrangler

2.- Überprüfen Sie am Ende der App, ob der Unterbrechungstyp "Windows (CRLF)" ist.

pmartinezd
quelle
1

Sein ec2-Benutzer für Amazon Linux AMIs und Ubuntu für Ubuntu-Images. Auch RHEL 6.4 und höher ec2-Benutzer RHEL 6.3 und früher root Fedora ec2-Benutzer Centos root

Amith Ajith
quelle
0

Einfach zu dieser Liste hinzufügen. Ich hatte heute Morgen Probleme mit einem neuen Benutzer, der gerade einer AWS EC2-Instanz hinzugefügt wurde. Um auf den Punkt zu kommen , war das Problem Selinux (das in der Durchsetzung war ), zusammen mit der Tatsache, dass sich mein Benutzer-Home-Verzeichnis auf einem neuen EBS-Volume befand. Irgendwie mag Selinux dieses andere Volume nicht. Ich habe eine Weile gebraucht, um das herauszufinden, da ich alle anderen üblichen SSH-Probleme durchgesehen habe (/ etc / ssh / sshd_config war in Ordnung, natürlich kein Passwort erlaubt, Berechtigungen waren richtig usw.)

Die Reparatur?

Im Moment (bis ich verstehe, wie man einem Benutzer erlaubt, auf ein anderes Volume zu ssh oder dieses Volume irgendwie zu einem echten Home-Dir-Punkt zu machen):

sudo perl -pi -e 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
sudo setenforce 0

Das ist es. Jetzt kann sich mein neuer Benutzer mit seinem eigenen Schlüssel id_rsa anmelden.

Pierre D.
quelle
0

Hatte das gleiche Problem. Berechtigung verweigert (publickey) beim Versuch, sich mit 'ec2-user' oder 'root' anzumelden.

Die AMI-Nummer des Computer-Images wurde gegoogelt und die SSH-Anmeldeinformationen wurden direkt auf der Debian-Wiki-Seite angezeigt.

Hoffe das hilft.

Lionel Morrison
quelle