Warum erhalte ich die Meldung "Permission denied (publickey)", wenn ich versuche, SSH von lokalem Ubuntu auf einen Amazon EC2-Server zu übertragen?

218

Ich habe eine Instanz einer Anwendung, die in der Cloud auf einer Amazon EC2-Instanz ausgeführt wird, und ich muss eine Verbindung von meinem lokalen Ubuntu herstellen. Es funktioniert gut auf einem lokalen Ubuntu und auch Laptop. Ich habe die Meldung "Permission denied (publickey)" erhalten, wenn ich versuche, auf einem anderen lokalen Ubuntu auf SSH zu EC2 zuzugreifen. Es ist so seltsam für mich.

Ich denke, eine Art von Problemen mit den Sicherheitseinstellungen auf dem Amazon EC2, der über eingeschränkten IP-Zugriff auf eine Instanz oder ein Zertifikat verfügt, muss möglicherweise neu generiert werden.

Kennt jemand eine Lösung?

Vorleak Chy
quelle
11
"Früher hat es funktioniert" - vor was ?
womble
Ich habe eine Elastic Beanstalk EC2-Instanz. Bis August 2013 bestand die Lösung darin, auf die Instanz als Benutzer mit dem Namen ec2 zuzugreifen, wodurch der Fehler "Permission Denied" (publicKey) behoben wurde. Viz: ssh -i ./mike-key-pairoregon.pem [email protected]. Natürlich müssen Sie alle anderen Sachen wie pro stackoverflow.com/questions/4742478/…
Mikemay
3
Sie erhalten dieses Problem, wenn Sie den falschen Benutzernamen angegeben haben. Die aws-Dokumente ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ) enthalten derzeit ein Beispiel mit dem Benutzernamen ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com], während meine (alte) Ubuntu-Box den Benutzernamen ubuntu hat. Wenn ich also das Beispiel verwende, erhalte ich diesen Fehler und ändere ihn in den korrekten Benutzernamen.
david.barkhuizen
@ david.barkhuizen, dein Kommentar hat mir geholfen. Ich hatte ein ähnliches Problem. es stellte sich heraus, dass es mit dem Benutzernamen zu tun hatte. Vielen Dank.
NaijaProgrammer

Antworten:

143

In diesem Fall müssen Sie zunächst die -vOption to verwenden ssh, damit Sie sehen können, welche Arten der Authentifizierung versucht werden und was das Ergebnis ist. Hilft das, die Situation aufzuklären?

In Ihrem Update zu Ihrer Frage erwähnen Sie "auf einem anderen lokalen Ubuntu". Haben Sie den privaten ssh-Schlüssel auf die andere Maschine kopiert?

Greg Hewgill
quelle
2
Ich habe den privaten ssh-Schlüssel auf den anderen Computer kopiert, wie von @Greg vorgeschlagen. Es funktioniert jetzt. Vielen Dank!
Vorleak Chy
3
Zu Ihrer Information, Sie können die -i-Flagge verwenden, um auf den Pfad der Schlüssel zu zeigen, ohne sie zu installieren
Jorge Vargas
20
In meinem Fall habe ich eine .ami-Datei von bitnami verwendet und nicht bemerkt, dass Sie sich als Benutzer mit dem Namen bitnami anmelden müssen ssh -i <keyfile> bitname@<ec2-address>. Leider -vhat mir die Option nicht geholfen, das zu finden, aber es ist trotzdem sehr nützlich, es zu überprüfen!
Matt Connolly
7
Nun, in meinem Fall habe ich den falschen Benutzernamen verwendet. benutzte "ubuntu" anstelle von "bitnami". so: ssh -i key.pem bitnami @ hostaddress
Lucas Pottersky
3
Ein guter Vorsprung ist auch der Remote-Knoten selbst, in den /var/log/auth.logSie manchmal die folgenden Meldungen sehen: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keysoder etwas anderes
Jonas Libbrecht
76

Da dies nicht explizit erwähnt wurde, ist sshd bei den Berechtigungen für die authorized_keysDateien standardmäßig sehr streng . Also, wenn authorized_keysist beschreibbar für jemanden anderen als den Benutzer oder kann beschreibbar gemacht werden , indem jemand anderes als der Benutzer, wird es ablehnen , zu authentifizieren (es sei denn , sshd mit konfiguriert ist StrictModes no)

Was ich mit "kann beschreibbar gemacht werden" meine, ist, dass, wenn eines der übergeordneten Verzeichnisse für andere als den Benutzer beschreibbar ist, Benutzer, die diese Verzeichnisse ändern dürfen, Berechtigungen so ändern können, dass sie authorized_keys ändern / ersetzen können.

Wenn das /home/username/.sshVerzeichnis nicht im Besitz des Benutzers ist und der Benutzer daher keine Berechtigung zum Lesen des Schlüssels hat, können Probleme auftreten:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Beachten Sie, dass Jane die .sshDatei nicht besitzt. Beheben Sie dies über

chown -R jane:jane /home/jane/.ssh

Diese Art von Dateisystem-Berechtigungsproblemen wird nicht ssh -vangezeigt, und sie werden nicht einmal in den sshd-Protokollen (!) Angezeigt, bis Sie die Protokollstufe auf DEBUG setzen.

  • Bearbeiten /etc/ssh/sshd_config. Sie möchten eine Zeile, die LogLevel DEBUGdort irgendwo liest . Laden Sie den SSH-Server mithilfe des von der Distribution bereitgestellten Mechanismus neu. ( service sshd reloadunter RHEL / CentOS / Scientific.) Durch ein ordnungsgemäßes Neuladen werden vorhandene Sitzungen nicht gelöscht.
  • Versuchen Sie erneut, sich zu authentifizieren.
  • Stellen Sie fest, wohin Ihre Authentifizierungsprotokolle gehen, und lesen Sie sie. (IIRC, /var/log/auth.logauf Debian-basierten Distributionen; /var/log/secureauf RHEL / CentOS / Scientific.)

Es ist viel einfacher herauszufinden, was mit der Debug-Ausgabe, die Dateisystem-Berechtigungsfehler enthält, falsch läuft. Denken Sie daran, die Änderung rückgängig zu machen, /etc/ssh/sshd_configwenn Sie fertig sind!

Kjetil Joergensen
quelle
5
Dieses "Kann beschreibbar gemacht werden"
-Bit
7
FWIW die richtigen Berechtigungen für die Schlüsseldateien sind 600 (siehe hier )
Matt Lyons
1
Ja, meine .authorized_keys-Datei konnte von der Gruppe geschrieben werden, sodass sie nicht akzeptiert wurde.
Aditya MP
2
Ich schlug meinen Kopf gegen die Wand! Mein Benutzerordner hatte die falschen Berechtigungen. Danke!
XJones
4
Gleiches gilt für den Ordner ~ / .ssh. Möglicherweise wird folgende Fehlermeldung angezeigt:Authentication refused: bad ownership or modes for directory
Jewgenij M.
37

Ich habe diesen Fehler erhalten, weil ich vergessen habe, eine -lOption hinzuzufügen . Mein lokaler Benutzername war nicht derselbe wie auf dem Remote-System.

Dies beantwortet Ihre Frage nicht, aber ich habe hier nach einer Antwort auf mein Problem gesucht.

pkmk
quelle
25
ssh host -l userist das selbe wie ssh user@host, richtig?
Znarkus
3
@Znarkus ja, es ist das selbe.
Cregox
Yup, dies löste mein Problem und verursachte den Fehler "Permission denied (publickey)".
Brooks Moses
1
Das war das Problem für mich. Ich habe erwartet, dass der Benutzer "root" funktioniert, aber ich habe ein Ubuntu EC2-Image mit dem Standardbenutzer "ubuntu" verwendet.
Cerin
20

Ich habe diese Nachricht auf einer neuen Instanz erhalten, die auf Ubuntu AMI basiert. Ich habe die Option -i verwendet, um die PEM bereitzustellen, aber es wurde immer noch die Meldung "Permission denied (publickey)" angezeigt.

Mein Problem war, dass ich nicht den richtigen Benutzer verwendete. Durch Ausführen von ssh mit ubuntu @ ec2 ... funktionierte es wie gewohnt.


quelle
Ja ... Ich habe den Befehl mit ausgeführt sudo, weshalb es nicht funktioniert hat.
Thaddeusmt
16

Etwas, das einfacher zu lesen ist als ssh -v(meiner Meinung nach natürlich) tail -f /var/log/auth.log. Dies sollte auf dem Server ausgeführt werden, zu dem Sie eine Verbindung herstellen möchten, während Sie versuchen, eine Verbindung herzustellen. Es werden Fehler im Klartext angezeigt.

Dies hat mir geholfen, mein Problem zu lösen:

Benutzer [Benutzername] von xx.yy.com ist nicht zulässig, da keine der Benutzergruppen in AllowGroups aufgeführt ist

Znarkus
quelle
Dies ist das Server-Protokoll. für RHEL / CentOS 7:tail -f /var/log/secure
Gianfranco P.
10

Überprüfen Sie Ihre / etc / ssh / sshd_config- Datei. Dort finden Sie die Zeile, die sagt

PasswordAuthentication no

Diese Zeile muss geändert werden, um Ja statt Nein zu sagen. Starten Sie den sshd-Server anschließend neu.

sudo /etc/init.d/ssh restart
Sudipta Chatterjee
quelle
18
Das würde den Server weniger sicher machen.
Znarkus
Dies war das Problem, das ich hatte: Ich wollte ein Konto für einen anderen Benutzer einrichten und mich nur mit einem Kennwort authentifizieren. Ich wollte mich auch an Orten anmelden können, an denen ich meinen privaten Schlüssel nicht hatte.
Daniel
1
Wie können wir zu gehen /etc/ssh/sshd_config- wenn wir nicht einmal in den Server gelangen können?
Kyo
Um auf den Server selbst zuzugreifen, müssen Sie die PEM-Datei verwenden, die sie beim Erstellen der Instanz ausgegeben haben. Die Anweisungen gehen danach.
Sudipta Chatterjee
Dies funktionierte für mich, obwohl für den Neustart von sshd der folgende Befehl erforderlich war:sudo service sshd reload
pacoverflow
6

Vielleicht nicht relevant für das aktuelle Poster, könnte aber anderen helfen, die dies finden, wenn sie nach Antworten auf ähnliche Situationen suchen. Anstatt Amazon das SSH-Schlüsselpaar generieren zu lassen, empfehle ich, Ihren eigenen öffentlichen Standard-SSH-Schlüssel auf Amazon hochzuladen und diesen beim Ausführen einer EC2-Instanz anzugeben.

Auf diese Weise können Sie die Syntax vom Typ "-i" in ssh löschen, rsync mit Standardoptionen verwenden und in allen EC2-Regionen denselben ssh-Schlüssel verwenden.

Ich habe hier einen Artikel über diesen Prozess geschrieben:

Hochladen persönlicher SSH-Schlüssel auf Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys

Eric Hammond
quelle
+1 Hat diese Frage genau aus diesem Grund nachgeschlagen.
John Riselvato
Ich sehe diesen Fehler, wenn ich Ihrem Artikel folge. regions = $ (ec2-describe-regions | cut -f2) Erforderliche Option '-K, --private-key KEY' fehlt (-h zur Verwendung)
KashifAli
@KashifAli Sie möchten die Anmeldeinformationen für das EC2-API-Befehlszeilentool einrichten, damit Sie die Anmeldeinformationen nicht immer in jeder Befehlszeile weitergeben müssen.
Eric Hammond
5

Seltsamerweise stellte sich heraus, dass der Server neu gestartet und ein neuer DNS-Name vergeben wurde. Ich habe den alten DNS-Namen verwendet. Ich weiß, das klingt dumm, aber ich habe eine Weile gebraucht, um das herauszufinden.

Patrick Collins
quelle
Danke! Das war genau mein Problem. Ich habe nicht bemerkt, dass sich der DNS-Name geändert hat, als Sie eine Instanz neu gestartet haben.
Tim Swast
In meinem Fall hat sich die URL * .compute.amazonaws.com geändert, als ich eine elastische IP zugewiesen habe.
Geoffrey Booth
2

Wenn Sie versuchen, eine Verbindung zu einem CyanogenMod-Telefon herzustellen, auf dem Dropbear ausgeführt wird, sollten Sie die folgenden Zeilen ausführen, um sicherzustellen, dass alle Berechtigungen korrekt sind:

chmod 600 /data/dropbear/.ssh/authorized_keys

oder

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

und

chmod 755 /data/dropbear/ /data/dropbear/.ssh

Das hat es für mich behoben, sonst kann sich nichts verbinden.

Naftuli Kay
quelle
msgstr "beim Versuch, auf einem anderen lokalen Ubuntu auf SSH zu EC2 zuzugreifen."
Grammargeek
1
Was ist, wenn ich keine authorized_keys habe ?
IgorGanapolsky
2

Wenn Sie mit CentOS 5, können Sie festlegen möchten StrictModes noin /etc/ssh/sshd_config. Ich teile / home-Verzeichnis mit NIS / NFS und habe alle Berechtigungen korrekt festgelegt, wurde jedoch immer zur Eingabe des Kennworts aufgefordert. Nachdem ich eingestellt hatte StrictModes no, verschwand das Problem!

Uichin
quelle
1

Gregs Antwort erklärt, wie Sie Probleme besser lösen können. Das eigentliche Problem ist jedoch, dass auf einer Seite der Transaktion (dem Client) ein SSH-Schlüssel festgelegt ist, der eine Authentifizierung mit öffentlichem Schlüssel anstelle einer passwortbasierten Authentifizierung versucht. Da Sie auf der EC2-Instanz nicht über den entsprechenden öffentlichen Schlüssel verfügen, funktioniert dies nicht.

Cian
quelle
2
Wie können Sie das Problem beheben?
Julien Grenier
1

Ich hatte das gleiche Problem und nachdem ich Tonnen von Lösungen ausprobiert hatte, die nicht funktionierten, öffnete ich den SSH-Port an der Firewall meines Routers (die Firewall-Systemsteuerung meines Routers ist durcheinander, daher ist es schwer zu sagen, was los ist). Wie auch immer, das hat es behoben :)

Super verdammt ärgerlich, dass der Fehler, den Sie bekommen, "Permission Denied" ist, was bedeutet, dass irgendeine Verbindung hergestellt wurde, grr.

Chichilatte
quelle
1

Ich hatte das gleiche Problem, obwohl ich angeblich alle Schritte einschließlich folgte

$ ec2-authorize default -p 22

Ich hatte jedoch meine Instanz in der Region us-west-1 gestartet. Daher sollte der obige Befehl dies auch angeben.

$ ec2-authorize default -p 22 --region us-west-1

Nach diesem Befehl konnte ich in die Instanz ssh. Ich habe eine Weile gebraucht, bevor ich das Problem erkannt habe und hoffe, dass dieser Beitrag anderen hilft.

Ajit Verma
quelle
0

Dies ist ein seltener Fall, aber wenn Sie selinux aktiviert haben und nfs für das Verzeichnis mit den authorized_keys verwenden (z. B. freigegebene Home-Verzeichnisse), müssen Sie entweder selinux deaktivieren (aus Sicherheitsgründen nicht empfohlen, aber Sie können es vorübergehend deaktivieren) um zu sehen, ob dies das Problem verursacht) oder erlauben Sie selinux, nfs home-Verzeichnisse zu verwenden. Ich weiß nicht genau, aber das hat bei mir funktioniert setsebool -P use_nfs_home_dirs 1

Reese
quelle
0

Ich habe gerade das gleiche Problem festgestellt, nachdem ich versehentlich Gruppenschreibberechtigungen zum Basisverzeichnis des Benutzers hinzugefügt habe.

Ich entdeckte, dass dies die Ursache war, indem ich tail -f /var/log/secureauf der Maschine lief und den Fehler sah Authentication refused: bad ownership or modes for directory /home/<username>.

Jacob Tomlinson
quelle