Wie werden öffentliche Schlüssel an Server "gesendet" und wie werden private Schlüssel für SSH "verwendet"?

11

Es gibt zwei Linux-Maschinen, A und B. Skripte, die auf A ausgeführt werden, müssen in der Lage sein, SSH in B zu übertragen. Daher generiert A einen öffentlichen Schlüssel (wahrscheinlich einen ssh-keygengenerierten id_rsa.pub) und verwendet dann seinen jeweiligen privaten Schlüssel (wahrscheinlich wieder id_rsa), um ihn zu erstellen diese SSH-Verbindung.

Wenn etwas, was ich oben gesagt habe, falsch oder irregeführt ist, korrigieren Sie mich bitte zunächst!

Vorausgesetzt, ich bin mehr oder weniger am Ziel:

  • Wie "gibt" A B seinen öffentlichen Schlüssel ( id_rsa.pub)? Muss dies ein manueller Prozess sein oder kann er automatisiert werden? Wenn manuell, wie ist der Prozess? Wenn automatisiert, wie lautet der Befehl? Wenn B diesen öffentlichen Schlüssel "bekommt", wohin geht er oder wird er gespeichert?
  • Wie verwendet A beim Initiieren der SSH-Verbindung zu B seinen privaten Schlüssel ( id_rsa) als Teil dieser Verbindung?
user3178622
quelle
3
Warum die Ablehnung ohne Erklärung? Es zeigt Forschung, ist eine SSCCE und meines Wissens kein Duplikat. Wenn Sie nicht einverstanden sind und glauben, dass dies ein Duplikat ist, geben Sie bitte einen Link zu der Frage an, von der Sie glauben, dass es sich um ein Duplikat handelt!
user3178622
Ich habe zwar nicht abgelehnt und denke nicht, dass diese Frage in irgendeiner Weise schlecht ist, aber vielleicht wäre Information Security Stack ein geeigneterer Ort.
MC10
3
Ich habe auch nicht abgestimmt, aber ich verstehe, warum es jemand getan hat. Dies ist eine weit verbreitete Anmeldemethode, obwohl ich damit einverstanden bin, dass die Google-Suchergebnisse mit der Funktionsweise und nicht mit der Funktionsweise von Artikeln überfüllt sind. Es ist möglich, die gesuchten Informationen zu finden.
Tyson
5
Der Begriff SSCCE ist nicht wirklich auf Fragen anwendbar, bei denen es nicht um Code geht.
Scott
2
Kein Duplikat, aber verwandt: superuser.com/questions/383732/how-does-ssh-encryption-work . Könnte den zweiten Teil der Frage beantworten (wie private Schlüssel verwendet werden)
Jay

Antworten:

5

ssh-keygengeneriert sowohl den öffentlichen als auch den privaten Schlüssel, die sich zunächst nur lokal befinden. Das Übergeben des öffentlichen Schlüssels an einen anderen Host muss der Benutzer manuell ausführen, indem er ihn entweder an eine für Server B verantwortliche Person sendet oder wenn Sie ein Konto mit einem Kennwort haben, können Sie sich anmelden und selbst dort ablegen. Um eine kennwortlose Anmeldung bei Server B zu ermöglichen, müssten Sie Ihren öffentlichen Schlüssel zur Datei ~ / .ssh / authorized_keys auf Server B hinzufügen (ein öffentlicher Schlüssel pro Zeile, diese Datei kann eine beliebige Anzahl von Schlüsseln enthalten). Es gibt einen Linux-Befehl ssh-copy-id, der die ID für Sie kopiert und in die Datei einfügt.

Standardmäßig verwendet ssh die Datei ~ / .ssh / id_XXX als Ihren privaten Schlüssel. XXX kann rsa, dsa oder ein beliebiges Protokoll sein, für das ein Schlüssel generiert wurde. IIRC, dsa ist alt und sollte nicht verwendet werden. Wenn Sie einen anderen privaten Schlüssel verwenden möchten, können Sie ihn in Ihrem Befehl ssh mit angeben -i. Solange der verwendete private Schlüssel mit einem öffentlichen Schlüssel auf dem Remotecomputer übereinstimmt (in der Datei authorized_keys für das Benutzerkonto, bei dem Sie sich anmelden), müssen Sie kein Kennwort angeben.

BamaPookie
quelle
Danke @BamaPookie - ein paar Follow-ups: (1) Wann ssh-keygenwird ausgeführt, erwähnen Sie, dass sich die beiden Schlüssel "nur lokal befinden"? Wo?!? Wie in welchem ​​Ordner kann ich navigieren und sehen id_rsa.pubund id_rsa? (2) Ich dachte, ssh-addes wäre der Befehl zum Hinzufügen eines öffentlichen Schlüssels zu authorized_keys, nein? Was ist der Unterschied zwischen ssh-copy-idund ssh-add? Danke noch einmal!
user3178622
2
@ user3178622 re '1' Ich habe es nicht vor mir, aber es sieht aus wie ~/.ssh/id_rsa re '2', ssh-add ist nicht zum Hinzufügen zu autorisierten Schlüsseln gedacht, sondern zum Hinzufügen zu einem Schlüsselbund. Ich habe ssh nicht verwendet -add obwohl. ssh-add hat damit zu tun, dass Sie nicht jedes Mal eine Schlüsselphrase eingeben müssen, wenn Sie einen Schlüssel verwenden, für den eine Schlüsselphrase erforderlich ist. Wenn für Ihre SSH-Schlüssel keine Schlüsselphrase erforderlich ist, gibt es vermutlich keinen Grund, SSH-Add zu verwenden, und ich denke, Sie müssen weiterhin SSH-Copy-ID verwenden oder den öffentlichen Schlüssel manuell kopieren Authorized_keys
Barlop
2
ssh-keygen fragt Sie, wo die Datei gespeichert werden soll, aber der Standardspeicherort ist ~ / .ssh / ssh-copy-id kopiert den öffentlichen Schlüssel auf einen Remote-Host. ssh-add fügt Ihrem lokalen Schlüsselbund einen privaten Schlüssel hinzu. Das Hinzufügen eines privaten Schlüssels zu Ihrem lokalen Schlüsselbund bedeutet, dass dieser beim Versuch einer SSH-Verbindung standardmäßig überprüft wird (dh ohne ihn mit -i angeben zu müssen).
BamaPookie
1
@BamaPookie Wo Sie schreiben "Das Hinzufügen eines privaten Schlüssels zu Ihrem lokalen Schlüsselbund bedeutet, dass dieser beim Versuch einer SSH-Verbindung standardmäßig überprüft wird (dh ohne ihn mit -i angeben zu müssen)." <--- Es lohnt sich, dies zu klären Ich denke, Sie meinen, es ändert den ausgewählten privaten Standardschlüssel, sodass er nicht id_rsa, sondern vom Schlüsselbund stammt. (Ohne ssh-add müssen Sie natürlich immer noch keinen privaten Schlüssel mit -i angeben, es wird immer noch einen Standard geben, nur einen anderen Standard).
Barlop
3

Es gibt zwei Linux-Maschinen, A und B. Skripte, die auf A ausgeführt werden, müssen in der Lage sein, SSH in B zu übertragen. Daher generiert A einen öffentlichen Schlüssel (wahrscheinlich einen von ssh-keygen generierten id_rsa.pub) und verwendet dann seinen jeweiligen privaten Schlüssel ( wieder wahrscheinlich id_rsa), um diese SSH-Verbindung herzustellen.

Wenn etwas, was ich oben gesagt habe, falsch oder irregeführt ist, korrigieren Sie mich bitte zunächst!

Vorausgesetzt, ich bin mehr oder weniger am Ziel:

Ja

B benötigt jedoch den öffentlichen Schlüssel von A, der in der Datei "authorized_keys" von B aufgeführt ist, damit A eine Verbindung zu B herstellen kann

Sie können auch id_rsa.pub und ssh nach B löschen und es funktioniert weiterhin, da der öffentliche Schlüssel bei jeder ssh-Verbindung neu generiert und in keinem id_rsa.pub gespeichert wird

Wie "gibt" A B seinen öffentlichen Schlüssel (id_rsa.pub)? Muss dies ein manueller Prozess sein oder kann er automatisiert werden? Wenn manuell, wie ist der Prozess? Wenn automatisiert, wie lautet der Befehl?

Handbuch - so etwas wie

von einem-

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

oder noch mehr manuell, um den Befehl aufzuschlüsseln

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

Stellen Sie dann auf B sicher, dass ~ / .ssh vorhanden ist, und tun Sie dies cat a.a >> ~/.ssh/authorized_keys

und Sie können autorisierte_Tasten von B vorher und nachher katzen, um sicherzustellen, dass der Schlüssel aufgelistet ist.

Oder Sie können id_rsa.pub per E-Mail an ein E-Mail-Konto senden. Von B aus kann B die E-Mail abrufen und den Inhalt von id_rsa.pub an seine Datei "authorized_keys" anhängen

automatisch

Der Befehl ssh-copy-id

Sie müssen in der Lage sein, ssh einzutragen, daher benötigen Sie einen Kennwortzugriff

Anstatt ssh user @ host zu machen, machst du ssh-copy-id user @ host und du wirst zur Eingabe eines Passworts aufgefordert, du gibst es ein, du bist dabei, es wird den öffentlichen Schlüssel kopieren. Und wenn Sie das nächste Mal ssh user @ host ausführen, wird der Schlüssel verwendet.

Wenn B diesen öffentlichen Schlüssel "bekommt", wohin geht er oder wird er gespeichert?

B's ~ / .ssh / autorisierte_Tasten

Wie verwendet A beim Initiieren der SSH-Verbindung zu B seinen privaten Schlüssel (id_rsa) als Teil dieser Verbindung?

Nun, ich weiß nicht viel darüber, aber was auch immer mit einem Schlüssel verschlüsselt ist, kann mit dem anderen Schlüssel entschlüsselt werden, und sich zu identifizieren ist ein bisschen anders als das Senden von Daten. Und es kann etwas geben über einen temporären Schlüssel auch.

Barlop
quelle
Danke @barlop! Bitte sehen Sie meine Fragen unter BamaPookies Antwort; Ich habe die gleichen Fragen an Sie!
user3178622