SSH: bekannter Host mit dynamischer Adresse

12

Ich muss eine Verbindung zu einem Host mit einer dynamischen IP-Adresse herstellen.

Jedes Mal, wenn sich die IP ändert, fordert SSH mich zur Überprüfung des Fingerabdrucks auf:

The authenticity of host '...' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)?

Wäre es möglich, SSH den öffentlichen Hostschlüssel zu übergeben, so dass:

  1. SSH überprüft die Authentizität des Hosts automatisch
  2. Der Hostschlüssel wird nicht in der Datei unknown_hosts gespeichert

Diese Frage unterscheidet sich von Wie kann ich die Überprüfung von SSH-Hosts für bekannte Hosts vermeiden? da dass andere Fragen Ziele zu Unterdrückungs SSH - Validierung, während ich nicht wollen , es zu unterdrücken: Ich nicht möchte , dass die Host authentifiziert haben, nur die Host-öffentlichen Schlüssel (was ich weiß, und sie in einer Datei gespeichert haben) und nicht SSH known_hostsDatei.

Für mich scheint die andere Frage zu sein, jedes Mal eine Verbindung zu einem anderen Server herzustellen, anstatt eine Verbindung zu einem einzelnen bekannten Server mit einer dynamischen IP herzustellen.

Peoro
quelle

Antworten:

8

Die beste Lösung (dh am nächsten an dem, was ich möchte), die ich finden könnte, ist die Verwendung der Option HostKeyAlias: Es wird ein Hostname verwendet, den ich für den Zugriff angegeben habe known_hosts(anstelle der IP, mit der ich mich verbinde).

Ich muss den öffentlichen Schlüssel des Hosts zur known_hostsVerwendung eines bestimmten Hostnamens hinzufügen (z. B. :) myhostund dann eine Verbindung herstellen, indem ich :

ssh -o 'HostKeyAlias myhost' ...
Peoro
quelle
Ich weiß, dass es eine Weile her ist, aber: Wenn dies Ihre Frage am besten beantwortet, akzeptieren Sie es bitte.
Kittykittybangbang
Hinweis für andere: Sie können den HostKeyAliasKonfigurationswert zu Ihrer ~/.ssh/configDatei oder sogar zur globalen /etc/ssh/ssh_configDatei hinzufügen .
Kael
6

Die known_hostsDatei ist nicht nur der Schlüssel, sondern enthält auch den Hostnamen, mit dem Sie eine Verbindung herstellen, und nach Möglichkeit die entsprechende IP-Adresse. Aus diesem Grund wird der Fehler angezeigt. Er vergleicht das Triplet, das er vom Server erhält, mit dem, was Sie in der Datei unknown_hosts gespeichert haben.

Wenn sich die IP-Adresse ständig ändert, können Sie sie deaktivieren. Dies CheckHostIPbedeutet, dass nur der Hostname und der Hostschlüssel überprüft werden. Wenn diese unverändert bleiben, sollten Sie weniger Beschwerden haben, aber Sie sind gefährdet, wenn jemand Ihr DNS entführt.

NickW
quelle
1
Danke für die Antwort, ich werde es so schnell wie möglich testen! Warum sollte es überhaupt so weit sein? Wenn ich den öffentlichen SSH-Schlüssel eines Hosts kenne, sollte dies auf jeden Fall ausreichen, um absolut sicher zu sein (es sei denn, jemand schafft es, den privaten Schlüssel dieses Hosts zu stehlen), nicht wahr?
Peoro
Und trotzdem mag ich es nicht wirklich, wenn ich ehrlich sein muss. Mit diesem Flag greift SSH weiterhin zu known_hosts. Warum? Kann ich nicht sagen "ssh connect to X, dessen öffentlicher Schlüssel Y ist"? Warum nicht? Wäre das nicht 100% sicher?
Peoro
Die Idee ist, dass der Hostschlüssel Teil eines größeren Ganzen ist und dass dies allein nicht ausreicht, um sicherzustellen, dass der Server, mit dem Sie eine Verbindung herstellen, immer noch derjenige ist, mit dem Sie zuvor verbunden waren. Sie müssen sicherstellen, dass auch die IP- und DNS-Einträge übereinstimmen. Denken Sie daran, dass dies eine netzwerkbasierte Shell ist. Daher muss auch das Netzwerk überprüft werden.
NickW