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

1588
user3178622

Es gibt zwei Linux-Maschinen, A und B. Skripte, die unter A ausgeführt werden, müssen in der Lage sein, SSH in B zu erstellen. Also generiert A einen öffentlichen Schlüssel (wahrscheinlich einen ssh-keygengenerierten id_rsa.pub), und verwendet dann den entsprechenden privaten Schlüssel (wiederum wahrscheinlich id_rsa), um ihn herzustellen diese SSH-Verbindung.

Wenn etwas, was ich oben gesagt habe, falsch oder falsch ist, korrigieren Sie mich bitte zuerst!

Angenommen, ich bin mehr oder weniger am Ziel:

  • Wie "gibt" A seinen öffentlichen Schlüssel ( id_rsa.pub)? Muss dies ein manueller Prozess sein oder kann es automatisiert werden? Wenn manuell, wie ist der Prozess? Wenn automatisiert, wie lautet der Befehl? Wenn B diesen öffentlichen Schlüssel "bekommt", wo wird er gespeichert oder gespeichert?
  • Wie "benutzt" A beim Einleiten der SSH-Verbindung zu B seinen privaten Schlüssel ( id_rsa) als Teil dieser Verbindung?
11
Warum die Downvote ohne Erklärung? Es zeigt Forschung, ist eine [SSCCE] (http://sscce.org) und ist meines Wissens kein Duplikat. ** Wenn Sie nicht einverstanden sind und der Meinung sind, 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 vor 8 Jahren 3
Obwohl ich nicht abgelehnt habe und nicht der Meinung bin, dass diese Frage in irgendeiner Weise schlecht ist, wäre der [Informationssicherheit] (http://security.stackexchange.com/) -Stack möglicherweise ein geeigneterer Ort. MC10 vor 8 Jahren 0
Ich habe auch nicht nach unten gewählt, aber ich verstehe, warum jemand es tat. Dies ist eine weit verbreitete Anmeldemethode. Ich stimme zu, dass die Suchergebnisse in Google überladen sind, wie sie funktionieren sollen, und nicht, wie Artikel funktionieren. Es ist möglich, die Informationen zu finden, nach denen Sie suchen. Tyson vor 8 Jahren 3
@ MC10 Nein, es ist nicht für die Informationssicherheit, es ist nicht wirklich sicherheitsbezogen barlop vor 8 Jahren 0
Der Begriff SSCCE ist nicht wirklich auf Fragen anwendbar, die sich nicht mit Code beschäftigen. Scott vor 8 Jahren 5
Kein Duplikat, aber verwandt: https://superuser.com/questions/383732/how-does-ssh-encryption-work. Könnte den zweiten Teil der Frage beantworten (wie private Schlüssel verwendet werden) Jay vor 8 Jahren 2
@Scott SSCCE kann auf die Fragen vieler Benutzer angewendet werden, auch wenn es sich nicht um Code handelt. Viele Leute beschreiben Computerprobleme mit allen möglichen irrelevanten Abfällen wie "Computer meines Bruders". "Ich bin gerade aus dem Urlaub zurückgekehrt und das ist passiert". Weniger absurd sagen sie vielleicht, dass sie sich in einer virtuellen Maschine befinden - wenn es irrelevant ist. barlop vor 8 Jahren 0
@ barlop: Mir ist klar, dass es gute und schlechte Fragen gibt (mit einem grauen Spektrum dazwischen), und ich gebe zu, dass die Attribute ** S **, ** SC ** und ** C ** zu den Unterscheidungen gehören. Aber ich habe Probleme, das ** E ** zu schlucken. "Es gibt zwei Linux-Maschinen, A und B" ist wie "Drei sprachfähige Lebensformen betreten eine Einrichtung, die berauschende Getränke serviert" - sie sind keine * Beispiele, * sie sind allgemeine Szenarien. Um es klar zu sagen: Ich habe kein Problem mit der * Frage *, aber der Kommentar, der besagt, dass es "ein SSCCE" ist, ist, als würde man sagen, dass es farblos und grün ist. Scott vor 8 Jahren 0
@Scott Technisch gelten C und E nicht, da sie Code angeben. (obwohl sein Short auch Code etwas weniger prominent angibt). Aber C und E gelten immer noch direkt. C bedeutet, dass es richtig ist, analysiert unser Verstand, was er geschrieben hat und sagt Ja, das macht Sinn. Es kompiliert .. und E, gut umgangssprachlich, E - Beispiel enthält ein generisches Szenario, und ein generisches Szenario ist ein perfektes Beispiel, weil es kurz ist. So wie Sie mit C einverstanden sind (richtig, kompiliert), kompiliert es sich in unserem Kopf, also auch E, das Beispiel ist für den menschlichen Geist gut. barlop vor 8 Jahren 0
@Scott, obwohl gewährt, würde mit Code, S und SC C und E im Allgemeinen Code enthalten. Theers zweifelsfrei ist, dass die Angabe eines Beispiels auch für eine Nicht-Code-Frage gilt. (und manchmal ist ein vollständig kompilierbares Beispiel nicht notwendig. Wie hier hätte er versuchen können, die Befehlszeilenbeispiele aufzuschlüsseln, aber es war nicht notwendig. Wenn sein Englisch schlecht war und er nur mit der Befehlszeile sprechen konnte - was er läuft, was er erwartet, was er bekommt, dann wäre es notwendig gewesen). barlop vor 8 Jahren 0

2 Antworten auf die Frage

5
BamaPookie

ssh-keygenerzeugt sowohl den öffentlichen als auch den privaten Schlüssel, die sich anfangs nur lokal befinden. Die Übergabe des öffentlichen Schlüssels an einen anderen Host muss der Benutzer manuell durchführen, entweder durch Senden an einen für Server B verantwortlichen Benutzer, oder wenn Sie ein Konto mit einem Kennwort haben, können Sie sich anmelden und selbst dort ablegen. Um ein kennwortloses Anmelden an Server B zu ermöglichen, müssen Sie Ihren öffentlichen Schlüssel zur Datei ~ / .ssh / authorised_keys auf Server B hinzufügen (ein öffentlicher Schlüssel pro Zeile, in dieser Datei können beliebig viele Schlüssel vorhanden sein). Es gibt einen Linux-Befehl ssh-copy-id, der die ID für Sie kopiert und in die Datei speichert.

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 im 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, in dem Sie sich anmelden), müssen Sie kein Kennwort eingeben.

Vielen Dank @BamaPookie - ein paar Folgemaßnahmen: (1) Wenn `ssh-keygen` ausgeführt wird, erwähnen Sie, dass die beiden Schlüssel" nur lokal gespeichert sind "? ** Wo?!? ** Wie in welchem ​​Ordner kann ich navigieren und `id_rsa.pub` und` id_rsa` sehen? (2) Ich dachte, "ssh-add" wäre der Befehl zum Hinzufügen eines öffentlichen Schlüssels zu "authorised_keys", nein? Was ist der Unterschied zwischen `ssh-copy-id` und` ssh-add`? Danke noch einmal! user3178622 vor 8 Jahren 0
@ 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 von Authorized_keys, sondern zum Hinzufügen eines Schlüsselbunds .. Ich habe jedoch nicht ssh-add verwendet. ssh-add dient dazu, dass Sie nicht jedes Mal, wenn Sie einen Schlüssel verwenden, für den eine Schlüsselsatz erforderlich ist, eine Keyphrase eingeben müssen. Wenn Ihre ssh-Schlüssel also keine Keyphrase erfordern, gibt es wahrscheinlich keinen Grund, ssh-add zu verwenden, und ich denke, Sie müssten noch ssh-copy-id verwenden oder das manuelle Kopieren des öffentlichen Schlüssels in dieses Programm durchführen authorized_keys barlop vor 8 Jahren 2
ssh-keygen fragt Sie, wo die Datei gespeichert werden soll. Der Standardspeicherort befindet sich jedoch in ~ / .ssh / ssh-copy-id und 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üsselring bedeutet, dass er standardmäßig geprüft wird, wenn Sie versuchen, eine SSH-Verbindung herzustellen (dh, ohne dass Sie ihn mit -i angeben müssen). BamaPookie vor 8 Jahren 2
@BamaPookie Wo Sie schreiben "Das Hinzufügen eines privaten Schlüssels zu Ihrem lokalen Schlüsselbund bedeutet, dass er standardmäßig beim Versuch einer SSH-Verbindung geprüft wird (dh, ohne dass Sie ihn mit -i angeben müssen)." <--- Das ist zu klären Ich denke, Sie meinen damit, dass der gewählte private Standardschlüssel geändert wird, sodass er nicht id_rsa ist, sondern vom Schlüsselbund. (Natürlich müssen Sie ohne ssh-add immer noch keinen privaten Schlüssel mit -i angeben, es hat immer noch einen Standard, nur einen anderen Standard). barlop vor 8 Jahren 1
3
barlop

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

Wenn etwas, was ich oben gesagt habe, falsch oder falsch ist, korrigieren Sie mich bitte zuerst!

Angenommen, ich bin mehr oder weniger am Ziel:

Ja

B benötigt jedoch den öffentlichen Schlüssel von A, um in der B-Datei authorized_keys aufgeführt zu werden, damit sich A mit B verbinden kann

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

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

Handbuch - sowas

von einem-

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

oder noch mehr manuell, um den Befehl abzubrechen

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

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

und Sie können die Vor-und Nachher-ID-Schlüssel von B ausführen, um sicherzustellen, dass der Schlüssel aufgeführt ist.

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

automatisch

Der Befehl ssh-copy-id

Sie müssen in der Lage sein, ssh einzuschalten, damit Sie auf das Kennwort zugreifen können

Anstatt ssh user @ host auszuführen, müssen Sie ssh-copy-id user @ host eingeben, und Sie werden zur Eingabe eines Kennworts aufgefordert. Sie geben es ein, Sie befinden sich in diesem Ordner, und der öffentliche Schlüssel wird kopiert. Und wenn Sie ssh user @ host das nächste Mal verwenden, wird der Schlüssel verwendet.

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

B's ~ / .ssh / authorised_keys

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

Nun, ich weiß nicht viel darüber, aber nicht, was mit einem Schlüssel verschlüsselt wird, kann mit dem anderen Schlüssel entschlüsselt werden, und sich selbst zu identifizieren, ist etwas anderes als das Senden von Daten. Und da kann etwas sein auch über einen temporären Schlüssel.

Danke @barlop! Bitte sehen Sie meine Fragen unter BamaPookies Antwort; Ich habe die gleichen Fragen an dich! user3178622 vor 8 Jahren 0