Wie füge ich einen IP-Bereich zu known_hosts hinzu?

Wie füge ich einen IP-Bereich zu known_hosts hinzu?

Viele Dienste (wie GitHub) verwenden eine breite Palette von IPs und offensichtlich denselben öffentlichen Schlüssel.

Wie kann ich der Datei known_hosts einen IP-Bereich (vorzugsweise einen einzelnen) hinzufügen?

Für das GitHub-Beispiel werden die folgenden Bereiche verwendet:

  • 207.97.227.224/27
  • 173.203.140.192/27
  • 204.232.175.64/27
  • 72.4.117.96/27
  • 192.30.252.0/22

Und der Schlüssel ist:

AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5 QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

Antwort1

Wie in anderen Antworten erwähnt,bekannte_Hostsunterstützt keine IP-Adressbereiche. Es unterstützt jedoch Platzhalter. Natürlich sind Platzhalter nicht ganz dasselbe, Sie müssen also sehr vorsichtig sein, wie Sie sie in IP-Adressen verwenden, aber im speziellen Fall von GitHub ist dies sicher möglich.

Die Situation scheint sich seit der Fragestellung vereinfacht zu haben. LautOffizielle Dokumentation von GitHubEs wird nur ein IP-Adressbereich verwendet (zumindest was IPv4 betrifft). Dies ist der Bereich 192.30.252.0/22. Das ergibt 1020 mögliche IP-Adressen, die den gesamten möglichen Bereich für das letzte Oktett bequem in nur vier verschiedenen C-Blöcken abdecken.

Von man 8 sshdhier aus müssen wir arbeiten inbekannte_Hosts:

Hostnamesist eine durch Kommas getrennte Liste von Mustern ( *und ?fungieren als Platzhalter); jedes Muster wird wiederum mit dem kanonischen Hostnamen (bei der Authentifizierung eines Clients) oder mit dem vom Benutzer angegebenen Namen (bei der Authentifizierung eines Servers) verglichen. Einem Muster kann auch ein vorangestellt werden, um !eine Negierung anzuzeigen: Wenn der Hostname mit einem negierten Muster übereinstimmt, wird er (von dieser Zeile) nicht akzeptiert, selbst wenn er mit einem anderen Muster in der Zeile übereinstimmt. Ein Hostname oder eine Adresse kann optional in [und ]Klammern eingeschlossen werden, gefolgt von :und einer nicht standardmäßigen Portnummer.

Mit diesen Informationen können wir einen Eintrag mit dem *Platzhalter für das letzte Oktett erstellen, der mit allen möglichen GitHub-Endpunkten übereinstimmt (undnurdiese Endpunkte) etwa so:

github.com,192.30.252.*,192.30.253.*,192.30.254.*,192.30.255.* ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

Wenn der von Ihnen erstellte IP-Bereich keinen vollständigen C-Block (und damit alle möglichen Werte für ein Oktett) ausfüllen würde, wäre es für eine derart genaue Übereinstimmung mit der Verwendung von Platzhaltern nicht möglich.

Antwort2

Ich glaube nicht, dass Sie die Bereiche einfach hinzufügen können, aber ich denke (kann das gerade nicht testen), dass der gleiche Effekt erzielt werden kann, indem Sie Folgendes zu .ssh/ssh_config hinzufügen:

Host *.github.com
HostKeyAlias github-server-pool.github.com

Als Nächstes fügen Sie den Schlüssel der Datei known_hosts unter dem Namen github-server-pool.github.com hinzu.

Annahme: Der Host github-server-pool.github.com existiert nicht oder es besteht keine Verbindung über SSH.

Die Idee dahinter ist, dass SSH den Schlüssel github-server-pool.github.com als Schlüssel verwendet, um den öffentlichen Hostschlüssel für alle Hosts der Domäne github.com nachzuschlagen.

Antwort3

Es gibt keine Unterstützung für IP-Adresssätze in der known_hostsDatei. Sie müssen eine Zeile pro Adresse haben.

Obwohl der Hostnamenteil der Einträge standardmäßig gehasht wird, dient dies nur der Privatsphäre, damit jemand, der Sie erreicht, .known_hostsnicht so leicht herausfinden kann, mit welchen Hosts Sie sich verbunden haben. (Er kann Vermutungen trotzdem überprüfen.) Sie können einen einfachen Hostnamen oder eine IP-Adresse verwenden.

for net in 207.97.227.224/27 173.203.140.192/27 204.232.175.64/27 72.4.117.96/27 192.30.252.0/24 192.30.252.1/24 192.30.252.2/24 192.30.252.3/24; do
  base=${net%/*}; d=${base##*.}; abc=${base%.*}
  bits=$((32 - ${net#*/}))
  e=0
  while [ $e -lt $((2 ** bits) ]; do
    echo "$abc.$((d + e)) ssh-rsa AAAAB3NzaC1yc…" >>~/.ssh/known_hosts
    e=$((e + 1))
  done
done

Beachten Sie, dass hierdurch Duplikate hinzugefügt werden können.

Antwort4

Ich habe ein kleines Ruby-Skript geschrieben, github_known_hostsdas die IP-Adressbereiche erweitern kann, die GitHub von seinemMeta-API-Endpunkt(https://api.github.com/meta).

#!/usr/bin/env ruby

require "ipaddr"
require "json"

pubkey = "AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=="
ips    = JSON.parse(STDIN.read)["git"].flat_map { |net| IPAddr.new(net.chomp).to_range.map(&:to_s) }

puts "github.com,gist.github.com,#{ips.join(',')} ssh-rsa #{pubkey}"

Wenn Sie es folgendermaßen verwenden, wird eine sehr lange Zeile erstellt, die Sie in Ihre ~/.ssh/known_hostsDatei einfügen können:

curl --silent https://api.github.com/meta | github_known_hosts >> ~/.ssh/known_hosts

verwandte Informationen