Ich habe über das Einrichten von SSH-Schlüsseln in Linux gelesen und habe einige Fragen. Korrigieren Sie mich, wenn ich falsch liege …
Nehmen wir an, der Host tr-lgto möchte sich per SSH mit dem Host tr-mdm verbinden. Wenn wir sicher sein wollen, dass es sich um den echten tr-mdm handelt, generieren wir ein Schlüsselpaar auf tr-mdm und fügen den öffentlichen Schlüssel known_hosts
auf tr-lgto hinzu. Wenn tr-mdm überprüfen will, ob es sich um den echten tr-lgto handelt, muss tr-lgto ein Schlüsselpaar generieren und den öffentlichen Schlüssel auf authorized_keys
tr-mdm hinzufügen.
Frage 1: Es gibt keinBenutzerFeld in der Datei known_hosts, nur IP-Adressen und Hostnamen. tr-mdm hat möglicherweise viele Benutzer, jeder mit seinem eigenen .ssh
Ordner. Sollen wir den öffentlichen Schlüssel zu jeder der known_hosts
Dateien hinzufügen?
Frage 2: Ich habe herausgefunden, dass ssh-keyscan -t rsa tr-mdm
der öffentliche Schlüssel von tr-mdm zurückgegeben wird. Woher weiß ich, welchem Benutzer dieser Schlüssel gehört? Außerdem /root/.ssh/
unterscheidet sich der öffentliche Schlüssel von dem, den dieser Befehl zurückgibt. Wie kann das sein?
Antwort1
Sie verwechseln die Authentifizierung des Server-Computers gegenüber dem Client-Computer und die Authentifizierung des Benutzers gegenüber dem Server-Computer.
Serverauthentifizierung
Eines der ersten Dinge, die passieren, wenn die SSH-Verbindung hergestellt wird, ist, dass der Server seinen öffentlichen Schlüssel an den Client sendet und beweist (dankPublic-Key-Kryptographie) dem Client mit, dass er den zugehörigen privaten Schlüssel kennt. Dadurch wird der Server authentifiziert: Wenn dieser Teil des Protokolls erfolgreich ist, weiß der Client, dass der Server derjenige ist, der er vorgibt zu sein.
Der Client kann prüfen, ob es sich um einen bekannten Server handelt und nicht um einen betrügerischen Server, der sich als der richtige ausgeben will. SSH bietet nur einen einfachen Mechanismus zur Überprüfung der Legitimität des Servers: Es merkt sich Server, mit denen Sie bereits verbunden waren, in der ~/.ssh/known_hosts
Datei auf dem Client-Rechner (es gibt auch eine systemweite Datei /etc/ssh/known_hosts
). Wenn Sie sich zum ersten Mal mit einem Server verbinden, müssen Sie auf andere Weise prüfen, ob der vom Server bereitgestellte öffentliche Schlüssel wirklich der öffentliche Schlüssel des Servers ist, mit dem Sie sich verbinden wollten. Wenn Sie den öffentlichen Schlüssel des Servers haben, mit dem Sie sich verbinden möchten, können Sie ihn ~/.ssh/known_hosts
auf dem Client manuell hinzufügen.
Die Authentifizierung des Servers muss erfolgen, bevor Sie vertrauliche Daten an ihn senden. Insbesondere wenn die Benutzerauthentifizierung ein Kennwort erfordert, darf das Kennwort nicht an einen nicht authentifizierten Server gesendet werden.
Benutzerauthentifizierung
Der Server lässt einen Remote-Benutzer nur dann einloggen, wenn dieser nachweisen kann, dass er das Recht hat, auf dieses Konto zuzugreifen. Je nach Konfiguration des Servers und Wahl des Benutzers kann der Benutzer eine von mehreren Arten von Anmeldeinformationen vorlegen (die folgende Liste ist nicht vollständig).
- Der Benutzer kann das Kennwort für das Konto eingeben, bei dem er sich anmelden möchte. Der Server überprüft dann, ob das Kennwort korrekt ist.
- Der Benutzer kann einen öffentlichen Schlüssel vorlegen und beweisen, dass er den privaten Schlüssel besitzt, der mit diesem öffentlichen Schlüssel verknüpft ist. Dies ist genau dieselbe Methode, die zur Authentifizierung des Servers verwendet wird, aber jetzt versucht der Benutzer, seine Identität zu beweisen, und der Server überprüft ihn. Der Anmeldeversuch wird akzeptiert, wenn der Benutzer beweist, dass er den privaten Schlüssel kennt und der öffentliche Schlüssel in der Autorisierungsliste des Kontos (
~/.ssh/authorized_keys
auf dem Server) steht. - Bei einer anderen Methode wird ein Teil der Authentifizierungsarbeit des Benutzers an den Client-Rechner delegiert. Dies geschieht in kontrollierten Umgebungen wie Unternehmen, wenn viele Rechner dieselben Konten teilen. Der Server authentifiziert den Client-Rechner mit demselben Mechanismus, der auch umgekehrt verwendet wird, und verlässt sich dann auf den Client, um den Benutzer zu authentifizieren.
Antwort2
Meine Freunde haben mir die Antwort gegeben. Standardmäßig identifiziert der Schlüssel eine Maschine und keinen Benutzer. Daher werden die Schlüssel in /etc/ssh/ gespeichert. Deshalb habe ich einen anderen Schlüssel als den in /root/.ssh gespeicherten.