Warum fügt SSH einen bekannten_Host-Eintrag für eine IP-Adresse hinzu?

18

Ich habe einen Host namens nms.example.org. In meinem habe /etc/ssh/ssh_known_hostsich einen Eintrag für den Host mit dem RSA-Schlüssel. Dieser Eintrag und alle anderen Einträge werden von meinem Konfigurationsverwaltungssystem verwaltet.

nms.example.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZqfmVPs/XqTS...

Auch ich habe einen Eintrag in meinem /etc/ssh/ssh_configfür den spezifischen Wirt, der den Wirtschlüsselalias einstellt. Was bedeutet, wenn ich alles richtig verstehe, sollte nur das nms.example.orgeine Rolle spielen.

Host nms.example.org nms.example nms
    HostKeyAlias nms.example.org
    HostName nms.example.org

Warum dann, wenn ich mich von einem Client aus verbinde, scheint ssh immer noch zu glauben, dass es meinem benutzerspezifischen known_hosts einen Schlüssel mit der IP des Hosts hinzufügen muss ?

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/zoredache/.ssh/config
debug1: /home/zoredache/.ssh/config line 61: Applying options for *
debug1: /home/zoredache/.ssh/config line 71: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 84: Applying options for nms
debug1: /etc/ssh/ssh_config line 363: Applying options for *
debug1: Connecting to nms.example.org [104.236.190.144] port 22.
debug1: Connection established.
debug1: identity file /home/zoredache/.ssh/zoredache-20140204.id_rsa type 1
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: Permanently added the RSA host key for IP address '192.0.2.144' to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
...

SSH weiß, dass mein Host gültig ist (siehe Host 'nms.example.org' is known and matches the RSA host key:). Warum fügt es einem Benutzerprofil den Schlüssel für die IP hinzu?

Dies ist äußerst ärgerlich, da mein Konfigurationsverwaltungssystem bei der Neuinstallation eines Computers das Sammeln und Verteilen der Hostschlüssel an das gesamte System übernimmt. Es bleiben jedoch Schlüssel übrig, die mit IPs in bekannten_Host-Dateien in Konflikt stehen und bei einem Verbindungsversuch Warnungen auslösen, die verhindern, dass Skripte eine Verbindung herstellen.

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
...
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4
debug1: using hostkeyalias: nms.example.org
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: the RSA host key for 'nms.example.org' differs from the key for the IP address '192.0.2.144'
Offending key for IP in /home/zoredache/.ssh/known_hosts:25
Matching host key in /etc/ssh/ssh_known_hosts:104
Are you sure you want to continue connecting (yes/no)?

Wie kann ich verhindern, dass ssh diesen Pro-IP-Wert in den bekannten_Hosts aller Benutzer zwischenspeichert? Oder gibt es einen Sicherheitsgrund, warum ich mit diesem nervigen Verhalten leben muss? Das frustriert mich auch, weil einige Server etwas dynamische IP-Adressen haben. Mein Konfigurationsmanagement kümmert sich um die DNS-Updates. Aber ich bekomme diese verbleibenden IP-Host-Schlüssel, die meine benutzerspezifischen known_host-Dateien füllen.

Zoredache
quelle

Antworten:

22

Ich denke, es ist die CheckHostIPArbeit zu machen .

Wenn dieses Flag auf "yes" gesetzt ist, überprüft ssh (1) zusätzlich die Host-IP-Adresse in der known_hostsDatei. Dadurch kann ssh erkennen, ob sich ein Hostschlüssel aufgrund von DNS-Spoofing geändert hat. Wenn die Option auf "Nein" gesetzt ist, wird die Prüfung nicht ausgeführt. Der Standardwert ist "Ja".

Mit dieser Option erhalten Sie eine etwas bessere Diagnose im Falle einer Fehlkonfiguration oder eines Angriffs, aber sie verbessert die Sicherheit in keiner Weise, die ich mir vorstellen kann.

Wenn Sie CheckHostIPdeaktivieren, zeichnet SSH (ab OpenSSH 6.7p1) die IP-Adresse nicht auf, wenn Sie eine Verbindung mit einem neuen Host über den Namen herstellen. So fügen Sie dies zu Ihrem hinzu .ssh/config:

CheckHostIP no

Sie können es einem HostAbschnitt hinzufügen, wenn Sie es nur für einen bestimmten Host (insbesondere einen mit dynamischer IP-Adresse) deaktivieren möchten.

Gilles 'SO - hör auf böse zu sein'
quelle
Ja, das ist die Einstellung, die ich brauche.
Zoredache
Obwohl ich mit allem, was Sie @Gilles gesagt haben, einverstanden bin, würde ich (aus Gründen einer guten Diskussion) sagen, dass CheckHostIP yes dies die Sicherheit verbessert ... WENN der Benutzer genau weiß, was er tut, wie das System diesen Parameter verwendet und die Konzepte des impliziten Vertrauens. Also, ich würde wirklich Haare spalten, was ich nicht tun werde ... Ich werde es für die Sicherheit speichern;)
0xSheepdog