SSH in eine Box mit häufig geänderter IP

22

Ich habe einige Cloud-Boxen, die ihre IP häufig ändern.

Ich verwende den Hostnamen, muss aber die Datei known_hosts bei jedem Start des Servers aufgrund der folgenden Fehlermeldung bearbeiten:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

Gibt es, abgesehen von Sicherheitsrisiken und solchen, die mit dem, was ich tun möchte, verbunden sind, eine Möglichkeit, diesen Fehler entweder zu ignorieren oder die Datei known_hosts automatisch zu überschreiben, sodass ich sie nicht immer selbst bearbeiten muss?

coneybeare
quelle

Antworten:

20

Bearbeiten Sie Ihre ssh_config-Datei und ändern Sie diese Zeile:

CheckHostIP no

CheckHostIP ist standardmäßig auf "Ja" eingestellt. Damit wird nur die Art von Überprüfung durchgeführt, die Sie nicht bestehen. Wenn Sie das Kontrollkästchen deaktivieren, wird nur darauf vertraut, dass die IP-Adresse variabel ist, und der Schlüssel wird anhand des Hostnamens überprüft.

sysadmin1138
quelle
2
Dadurch wird eine Sicherheitsfunktion für alle Server deaktiviert , zu denen Sie jemals eine Verbindung herstellen werden. Dies ist eine äußerst schlechte Praxis. Verwenden Sie diese Option stattdessen nur für einen bestimmten Host, von dem Sie wissen, dass er dieses Problem hat, oder verwenden Sie die Option HostKeyAlias ​​erneut für einen bestimmten Host.
ZaTricky
@zaTricky "Extrem schlechtes Training"? Was ist so extrem daran, hmm? Ich denke, es ist ungefähr so ​​viel sicher, es ist einfach eine individuelle Präferenz. Sie müssen nur einen Schlüssel an einen Hostnamen (anstelle einer IP-Adresse) anheften. Bei https funktioniert das HPKP ähnlich und jeder sagt, es sei entweder sicher oder übermäßig sicher.
Kubanczyk
@kubanczyk Dies bedeutet, dass dies eine globale Einstellung sein soll - kein Hinweis auf die Angabe eines Hosts, auf den ich hingewiesen habe
zaTricky
25

Zusatz: Sie können versuchen, nur die CheckHostIP-Prüfung für diesen Namen zu deaktivieren :

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Koos van den Hout
quelle
5
Dies ist die beste Option, um die Auswirkungen der Deaktivierung der IP-Überprüfung auf die Sicherheit zu verringern.
Espo
3

Viele der Antworten hier werden funktionieren - aber technisch gesehen sind sie Workarounds. OpenSSH hat bereits eine integrierte Funktion in diesem Sinne: HostKeyAlias.


Fügen Sie in Ihrer .ssh / config-Datei HostKeyAlias <alias>einer Hostkonfiguration Folgendes hinzu :

host myserver.example.com
HostKeyAlias myserver.example.com

Wenn diese Option aktiviert ist, wird für die Verbindung zum Server myserver.example.comweder der Hostname noch die IP-Adresse als lokale Referenz verwendet. Bei der Verbindung zum Server werden immer nur die angegebenen HostKeyAlias ​​verwendet. Für mich ist es sinnvoll, den Hostnamen zu verwenden - aber Sie können natürlich jeden beliebigen Alias ​​verwenden.


Typische Konfigurationen für mich für dynamische Hosts sind wie folgt:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Dies kann auch in einigen obskuren Szenarien verwendet werden, in denen Sie wissen, dass mehrere Server dieselben Hostschlüssel haben (dies sollte im Allgemeinen nicht der Fall sein). Dies würde dann doppelte Einträge verhindern. Wenn sich die Schlüssel in Zukunft berechtigterweise ändern, müssen Sie nicht mehr mehrere Einträge ersetzen / löschen. Nur einer. Gitlab Geo-Server sind ein gutes Beispiel dafür.


In Bezug auf das Löschen der Datei known_hosts empfehle ich Ihnen, andere Fragen / Antworten zu lesen, die sich speziell auf das Verwalten / Entfernen veralteter known_hosts-Einträge beziehen. Ein Beispiel finden Sie unter So verwalten Sie meine .ssh / known_hosts-Datei . Ich bin besonders beeindruckt von der Antwort von user1953828, obwohl es (noch) nicht viele positive Stimmen gibt. :)

zaTricky
quelle
Dies zeigt, wie viel Wert eine Antwort am selben Tag auf SO gegenüber der richtigen Antwort hat, die 8 Jahre später beantwortet wurde.
Parität3
2

Ich benutze diese zwielichtigen Optionen, um dieses Problem zu umgehen. (Der öffentliche Schlüssel meines Hosts wird häufig neu generiert. Dadurch werden die IP- und Schlüsselüberprüfung entfernt.)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Sie können dies auch einfach verwenden, wenn der Schlüssel derselbe bleibt, sich aber die IP ändert:

ssh remoteServerName -l username -o "CheckHostIP=no"
Zv_oDD
quelle
Wenn Ihr Server die
Hostschlüssel so
1

Sie können StrictHostKeyChecking = no in Ihrer ssh- Client- Konfiguration festlegen (dh die Datei ~ / ssh / config auf dem Computer, von dem aus Sie eine Verbindung herstellen), um die Warnung zu ignorieren.

hayalci
quelle
1

Sie könnten CheckHostIP noin Ihre ~/.ssh/configDatei einfügen, aber das lässt Sie für Spoofing-Angriffe offen. Wenn Sie sich darüber keine Sorgen machen, sollte diese Einstellung die known_hostsPrüfung deaktivieren.

Steven Montag
quelle
0

Ich vermeide es, die Fingerabdrücke meiner known_hostsDatei hinzuzufügen, wenn ich eine Verbindung zu vorübergehenden AWS-Computern herstelle. Ich benutze einen Befehl wie

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem [email protected]

mit ihnen zu verbinden. Sie werden nicht gefragt, ob Sie das Gerät der Liste der bekannten Hosts hinzufügen möchten. Ersetzen Sie dies 10.0.0.5durch die IP-Adresse Ihres Geräts und secret.pemden vollständigen Pfad Ihres SSH-Schlüssels. Sie erhalten immer noch eine Warnung, dass das 10.0.0.5hinzugefügt wurde, aber es ist wirklich verschwunden /dev/null. Ich mache das oft genug, um einen Alias ​​in meinem Namen zu setzen~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Ich reserviere ssh [email protected]Typbefehle für Maschinen, bei denen ich mir die Mühe gemacht habe, den Fingerabdruck zu überprüfen.

Hbar
quelle
Dies macht Sinn , für Server , die Sie sich immer nur auf einmal verbinden - aber es gibt bessere Möglichkeiten, veraltete Einträge loszuwerden - und Sie sollten nicht sein , dass , wie schmutzig besorgt Ihre known_hosts - Datei. Wahrscheinlich haben Sie viel mehr Zeit und Energie aufgewendet, um diesen Alias ​​zu erstellen, als den Wert, den der Alias ​​Ihnen gebracht hat.
ZaTricky
-2

Machen Sie known_hosts schreibgeschützt.

Eldelshell
quelle
Dies unterbricht die Funktionalität, wenn pragmatische Optionen leicht verfügbar sind. : - /
zaTricky