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?

Dave Long
quelle
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 [email protected]

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

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

Marius Butuc
quelle
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
Shoaib Nawaz
quelle
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
jjg
quelle
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.

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

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

user273266
quelle
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
Sarel Botha
quelle
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
jlmontes
quelle