Wie füge ich der Datei authorized_keys SSH-Schlüssel hinzu?


185

Ich habe einen Ubuntu-Server auf Amazon EC2, den ich für die Entwicklung verwende, und heute habe ich dumm alles aus meiner ~/.ssh/authorized_keysDatei gelöscht . Glücklicherweise habe ich ein offenes SSH, so dass ich immer noch verbunden bin und die Datei reparieren kann, aber wenn ich versuche, meine Schlüsseldatei zurückzusetzen, funktioniert es nicht. Der Server auf meinem lokalen Computer verweigert mir weiterhin die Erlaubnis.

authorized_keysIch habe versucht, meinen SSH-Schlüssel mit ssh-rsa anzufügen und ssh-rsa auszulassen. Ich habe auch versucht, den SSH-Schlüssel in einer einzigen Zeile zu erstellen, aber das hat auch nicht funktioniert.

Gibt es noch etwas, was ich tun muss, um die Datei wie neu zu laden?


3
Jahre später scheint dies immer noch relevant und aktiv zu sein. wollte nur eine Beobachtung machen, darüber reden, dass ich einer Kugel ausgewichen bin: "Zum Glück habe ich eine offene SSH, also bin ich immer noch verbunden [..]" - Meine Güte! ; dP
Nostromov

1
Dieser Beitrag, der an meinem Geburtstag bearbeitet wurde, hat mich vor zwei Monaten an meinem Geburtstag gerettet.
Ytpillai

Antworten:


199

Sie sollten die Datei niemals mit ihrem Inhalt beginnend -----BEGIN RSA PRIVATE KEY-----auf dem Server speichern , das ist Ihr privater Schlüssel. Stattdessen müssen Sie den öffentlichen Schlüssel in die ~/.ssh/authorized_keysDatei einfügen.

Dieser öffentliche Schlüssel hat die .pubErweiterung, wenn er mit generiert wird, ssh-keygenund sein Inhalt beginnt mit ssh-rsa AAAAB3. (Das Binärformat wird in den Antworten auf diese Frage beschrieben. )

Die Berechtigungen ~/.sshauf dem Server sollten 700 sein. Die Datei ~/.ssh/authorized_keys(auf dem Server) sollte einen Modus von 600 haben. Die Berechtigungen des (privaten) Schlüssels auf der Clientseite sollten 600 sein.

Wenn der private Schlüssel nicht mit einem Passwort geschützt war und Sie es auf dem Server ablegen, empfehle ich Ihnen, ein neues zu generieren:

ssh-keygen -t rsa

Sie können dies überspringen, wenn Sie sicher sind, dass niemand den gelöschten privaten Schlüssel vom Server wiederherstellen kann.

Wenn dies nicht hilft, führen Sie die sshOptionen für mehr Ausführlichkeit aus:

ssh -vvv user@example.com

Auf der Serverseite können Sie /var/log/auth.logDetails überprüfen .


1
Bei Amazon EC2-Servern erhalte ich nur den privaten Schlüssel (key.pem). Ich habe nirgendwo einen öffentlichen Schlüssel.
Dave Long

3
@ Dave Long: Sie müssen einen neuen Schlüssel mit generieren ssh-keygen -t rsaund die neu erstellte id_rsa.pubDatei ~/.ssh/authorized_keysauf Ihrem Server ablegen . Siehe auch docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn

15
@ DaveLong: Sie können den öffentlichen Schlüssel jederzeit aus dem privaten Schlüssel generieren. Sie können dies einfach mit dem folgenden Befehl tun: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne

5
@MorganBlackthorne Obwohl dies zutrifft, würde ich empfehlen, Ihre privaten Schlüssel zu generieren, anstatt einen aus entfernten Quellen zu akzeptieren. Sie können nicht sicher sein, dass der private Schlüssel nicht durchgesickert ist.
Lekensteyn

2
@Gerrat Fixed².
Lekensteyn

175

Eine alternative Möglichkeit, Ihren öffentlichen Schlüssel auf dem Remote-Computer zu installieren authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Einige Vorteile:

  • muss nicht ssh-copy-idinstalliert werden.

  • garantiert, dass dies mkdirfunktioniert, bevor versucht wird, eine Verknüpfung id_rsa.pubzu erstellen authorized_keys.


10
Ihre Antwort hat mir geholfen, dies auf mehreren Remotecomputern ohne zusätzliche Pakete zu tun. Vielen Dank.
Nol

Dies garantiert nicht, dass das Verzeichnis "~ / .ssh" und die Datei "~ / .ssh / authorized_keys" mit den richtigen Berechtigungen erstellt werden.
Nick

1
@ Nick, ich hatte das Problem. Also muss man dann vielleicht erst wirklich nachschauen, ob sie existieren, wenn sie mit chmod (700 / Ordner, 600 / Datei) richtig erstellen und erst dann hinzufügen? Also kann es vielleicht kein Einzeiler sein?
AnneTheAgile

7
@AnneTheAgile Ich denke, Sie müssen nur den mkdir -p ~/.sshTeil der Antwort von @MariusButuc ändern, umask 077 && mkdir -p ~/.sshum sicherzustellen, dass es ordnungsgemäß funktioniert.
Nick

1
ty @Nick! Ich werde es versuchen.
AnneTheAgile

128

Wenn Sie eine Anmeldebasierte Authentifizierung haben, können Sie ssh-copy-idIhre öffentlichen Schlüssel an den Remote-Server anhängen.

ssh-copy-id user@host

1
Das scheint auf einem Mac kein gültiger Befehl zu sein, wie es auf meinem Clientcomputer der Fall ist.
Dave Long


13
Unter OSX können Sie Folgendes mit brew installieren:brew install ssh-copy-id
phil

Auf Macports kann dieser Befehl mit installiert werden sudo port install openssh +ssh_copy_id. Das +ssh_copy_idinstalliert openssh mit der Variante ssh_copy_id.
Stefan Lasiewski

6
Beachten Sie, dass die Anweisungen auf phildawson.tumblr.com fragen Sie nicht vertrauenswürdige Software zu installieren, als root. Das ist sehr gefährlich und eine gute Möglichkeit , gehackt werden, es sei denn , Sie wissen , dass Sie den Autor vertrauen kann.
Stefan Lasiewski

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

Der einfachste Weg ist, zu kopieren und ...

Sehen / kopieren Sie zuerst den Inhalt Ihres lokalen öffentlichen Schlüssels id_rsa.pubeinschließlich des Anfangs "ssh-rsa", bis er mit Ihrer E-Mail-Adresse endet:

cat ~/.ssh/id_rsa.pub

Bearbeiten Sie anschließend authorized_keysden Inhalt Ihrer Zwischenablage auf dem Server und fügen Sie ihn unter den anderen Schlüsseln in dieser Datei ein:

nano ~/.ssh/authorized_keys

Und zu speichern Ctl+O, schließen Sie die Datei Ctl+X, die SSH - Sitzung beenden exitund versuchen , in der Anmeldung zurück , um zu bestätigen es funktioniert. Wenn es nicht nach einem Passwort gefragt hat, hat es funktioniert.


5

Ich dachte, ich kann dazu beitragen, da es sich speziell um AWS-Instanzen handelt und alle Antworten das Problem nur als Linux-Problem behandeln, als wäre es ein Stück Hardware. Als Erstes müssen Sie verstehen, dass Sie EC2-Instanzen niemals als Hardware behandeln sollten. Das wird nur mehr Arbeit zu schaffen, damit Sie sie als flüchtiges behandeln. Das ist die größte Hürde Ich sehe Menschen mit AWS haben. Erstellen Sie eine AMI für Ihre Instanz und fügen Sie den benötigten Schlüssel in die neue Instanz ein. cloud-init wird für Sie darum kümmern. Im Einzelnen müssen Sie nur den richtigen öffentlichen Schlüssel verwenden, um die neue Instanz aus dem AMI des Originals zu erstellen. Wenn Sie wie in den Kommentaren der genehmigten Antwort Ihr eigenes Schlüsselpaar aus Pub- und PEM-Dateien generieren möchten, bietet AWS die Möglichkeit, Ihre öffentlichen Schlüssel zur Verwendung in EC2 hochzuladen.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

Nach dem Speichern des öffentlichen Schlüssels sollten Sie den privaten Schlüssel in einem Verzeichnis und einer Datei auf Ihrem PC speichern. Und in dem Auth-Abschnitt von ssh auf Kitt sollten Sie auf die private Schlüsseldatei verweisen, die Sie auf Ihrem Desktop gespeichert. Es wird klappen. Für mich geht das.


1
Ich würde lieben es einfach , wenn Windows - Konsole alle SSH - Funktionalität in es Interpreter hinzugefügt haben könnte
Dennis

2

Rufen Sie auf dem Remotecomputer eine Shell ab, auf der Sie den Schlüssel ablegen möchten, und führen Sie dann diesen Einzeiler aus, um die erforderlichen Dateien und Verzeichnisse zu erstellen, ihre Berechtigungen festzulegen und den Schlüssel an die Datei anzuhängen. Natürlich müssen Sie den folgenden KEYGOESHERETeil und den Kommentar danach ändern .

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

Hier ist eine Variante, bei der sich möglicherweise eine Liste mit Dateinamen für öffentliche Schlüssel in einer Textdatei befindet und sich auch die große Menge an Dateien für öffentliche Schlüssel im selben Verzeichnis befindet.

Diese Variante kann hilfreich sein, wenn Sie eine große Liste mit zu importierenden öffentlichen Schlüsseldateien angegeben haben :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
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.