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


Ich habe einen Ubuntu-Server auf Amazon EC2, den ich für die Entwicklung nutze, und heute habe ich blöd alles aus meinem Internet gelöscht ~/.ssh/authorized_keys Datei. Zum Glück habe ich ein SSH geöffnet, also bin ich immer noch verbunden und kann die Datei reparieren, aber wenn ich versuche, meine Schlüsseldatei zurückzusetzen, funktioniert es nicht. Ich erhalte immer noch eine Zugriffsberechtigung vom Server auf meinem lokalen Computer.

authorized_keys hat die Berechtigungen 600. Ich habe versucht, meinen SSH-Schlüssel mit ssh-rsa anzuhängen und den ssh-rsa auszulassen. Ich habe auch versucht, den SSH-Schlüssel alle eine Zeile zu machen, aber das hat auch nicht funktioniert.

Gibt es noch etwas anderes, das ich tun muss, um die Datei neu zu laden?


147
2018-06-01 16:02


Ursprung


Jahre später scheint dies - noch - relevant und aktiv zu sein; wollte nur eine Beobachtung machen, davon sprechen, einer Kugel ausgewichen zu sein: "Zum Glück habe ich eine SSH geöffnet, also bin ich immer noch verbunden [..]" - sheesh! ; dP - Nostromov
Dieser Beitrag, der an meinem Geburtstag editiert wurde, hat mich vor zwei Monaten an meinem Geburtstag gerettet. - ytpillai


Antworten:


Du solltest noch nie Speichern Sie die Datei mit ihren Inhalten beginnend mit -----BEGIN RSA PRIVATE KEY----- auf dem Server, das ist dein Privatgelände Schlüssel. Stattdessen müssen Sie die Öffentlichkeit Schlüssel in die ~/.ssh/authorized_keys Datei.

Dies Öffentlichkeit Schlüssel hat die .pub Erweiterung bei der Generierung mit ssh-keygen und sein Inhalt beginnt mit ssh-rsa AAAAB3. (Das Binärformat ist in den Antworten zu beschrieben diese Frage).

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

Wenn der private Schlüssel nicht mit einem Passwort geschützt war und Sie ihn auf dem Server speichern, empfehle ich Ihnen, einen neuen 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 das nicht hilft, lauf ssh mit Optionen für mehr Ausführlichkeit:

ssh -vvv user@example.com

Auf der Serverseite können Sie überprüfen /var/log/auth.log für Details.


170
2018-06-01 16:29



Bei Amazon EC2 Servern bekomme ich nur den privaten Schlüssel (key.pem). Ich habe keinen öffentlichen Schlüssel irgendwo. - Dave Long
@Dave Long: Sie müssen einen neuen Schlüssel mit verwenden ssh-keygen -t rsa und setze das neu erstellte id_rsa.pub Datei in ~/.ssh/authorized_keys auf deinem Server. Siehe auch docs.amazonwebservices.com/AWSEC2/latest/UserGuide/... - Lekensteyn
@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
@ MorganBlackthorne Während das stimmt, würde ich empfehlen, Ihre privaten Schlüssel zu generieren, anstatt eine von entfernten Quellen zu akzeptieren. Sie können nicht völlig sicher sein, dass der private Schlüssel nicht durchgesickert ist. - Lekensteyn
@Gerrat Fixed². - Lekensteyn


Eine alternative Möglichkeit zum Installieren Ihres öffentlichen Schlüssels auf dem Remotecomputer authorized_keys:

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

Einige Vorteile:

  • benötigt nicht ssh-copy-id installiert werden.

  • garantiert das mkdir funktioniert, bevor versucht wird, einen Anhang anzuhängen id_rsa.pub zu authorized_keys.


147
2018-02-27 19:31



Ihre Antwort hat mir geholfen, dies auf mehreren Remote-Computern ohne zusätzliche Pakete zu tun, danke. - nol
Dies garantiert nicht, dass das Verzeichnis "~ / .ssh" und "~ / .ssh / authorized_keys" mit den korrekten Berechtigungen erstellt wird. - Nick
@ Nick, ich hatte dieses Problem. Also dann muss man vielleicht erst mal nach ihrer Existenz suchen, wenn sie mit chmod (700 / ordner, 600 / file) richtig erstellt wird und erst dann hinzufügen? also, dann kann es vielleicht kein One Liner sein? - AnneTheAgile
@AnneTheAgile Ich denke, das ändern mkdir -p ~/.ssh Teil der Antwort von @MariusButuc an umask 077 && mkdir -p ~/.ssh ist alles was Sie tun müssen, um sicherzustellen, dass es richtig funktioniert. - Nick
ty @ Nick! Ich werde es versuchen. - AnneTheAgile


Wenn Sie Login-Authentifizierung verwenden dann verwenden ssh-copy-id um Ihre öffentlichen Schlüssel an den Remote-Server anzuhängen.

ssh-copy-id user@host

115
2018-06-01 16:32



Das scheint kein gültiger Befehl auf dem Mac zu sein, was meine Client-Maschine ist. - Dave Long
Kann hilfreich sein phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x - Shoaib Nawaz
auf OSX können Sie mit brew installieren: brew install ssh-copy-id - phil
In Macports kann dieser Befehl mit installiert werden sudo port install openssh +ssh_copy_id. Das +ssh_copy_id installiert openssh mit der ssh_copy_id-Variante. - Stefan Lasiewski
Beachten Sie, dass die Anweisungen auf phildawson.tumblr.com Sie auffordern, nicht vertrauenswürdige Software als root zu installieren. Dies ist ziemlich gefährlich und eine gute Möglichkeit, gehackt zu werden, es sei denn, Sie wissen, dass Sie dem Autor vertrauen können. - Stefan Lasiewski


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

32
2018-06-01 18:23





Der einfachste Weg ist das Kopieren und Einfügen ...

Zuerst den Inhalt Ihres lokalen öffentlichen Schlüssels anzeigen / kopieren id_rsa.pub einschließlich des Anfangs "ssh-rsa", bis es mit Ihrer E-Mail-Adresse endet:

cat ~/.ssh/id_rsa.pub

Dann bearbeiten authorized_keys auf dem Server und fügen Sie den Inhalt Ihrer Zwischenablage unter anderen Schlüsseln in dieser Datei ein:

nano ~/.ssh/authorized_keys

Und speichern Ctl+O, beende die Datei Ctl+X, beenden Sie die SSH-Sitzung exit und versuchen Sie erneut, sich einzuloggen, um zu bestätigen, dass es funktioniert hat. Wenn es nicht nach einem Passwort gefragt hat, hat es funktioniert.


7
2017-09-07 18:42





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


3
2018-04-23 19:59



Ich würde es einfach lieben, wenn die Windows-Konsole die gesamte ssh-Funktionalität in ihren Interpreter aufnehmen könnte - Dennis


Ich dachte, dass ich dazu beitragen kann, da es speziell um AWS-Instanzen geht und alle Antworten nur das Problem als Linux-Problem behandeln, als ob es ein Stück Hardware wäre. Das erste, was Sie verstehen müssen, ist, dass Sie niemals EC2-Instanzen als Hardware behandeln sollten. Das wird nur mehr Arbeit für Sie schaffen. Behandeln Sie sie als flüchtig. Das ist die größte Hürde, die ich bei AWS sehe. Erstellen Sie ein AMI Ihrer Instanz und fügen Sie den benötigten Schlüssel in die neue Instanz ein. cloud-init wird sich darum kümmern. Genauer gesagt müssen Sie nur den korrekten öffentlichen Schlüssel verwenden, wenn Sie die neue Instanz aus dem AMI des Originals erstellen. Wenn Sie wie in den Kommentaren der genehmigten Antwort ein eigenes Schlüsselpaar mit Pub- und Pem-Dateien generieren möchten, bietet Ihnen AWS die Möglichkeit, Ihre öffentlichen Schlüssel für die 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
2018-03-03 01:22





Holen Sie sich eine Shell auf dem Remote-Rechner, auf der Sie den Schlüssel ablegen wollen, und dann können Sie diesen One-Liner ausführen, um die notwendigen Dateien und Verzeichnisse zu erstellen, ihre Berechtigungen festzulegen und den Schlüssel an die Datei anzuhängen. Natürlich musst du das ändern KEYGOESHERE Teil unten und der Kommentar danach.

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
2017-12-07 20:33





Hier ist eine Variante, bei der Sie möglicherweise eine Liste von Dateinamen mit öffentlichen Schlüsseln in einer Textdatei haben und der große Stapel von Dateien mit öffentlichen Schlüsseln sich ebenfalls im selben Verzeichnis befindet.

Diese Variation kann hilfreich sein, wenn Sie eine riesige Liste von öffentlichen Schlüsseldateien zum Importieren geben :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done

1
2017-08-23 17:32