Reibungslosester Workflow zur Behandlung von SSH-Host-Überprüfungsfehlern?

41

Dies ist ein einfaches Problem, mit dem wir alle konfrontiert sind und das wir wahrscheinlich manuell lösen, ohne uns viel Gedanken zu machen.

Wenn sich Server ändern, erneut bereitgestellt oder IP-Adressen neu zugewiesen werden, erhalten wir die unten stehende SSH-Host-Bestätigungsnachricht. Ich bin daran interessiert, den Workflow zu optimieren, um diese SSH-Identifikationsfehler zu beheben.

In Anbetracht der folgenden Meldung vi /root/.ssh/known_hosts +434entferne ich normalerweise und ( dd) die fehlerhafte Zeile.

Ich habe gesehen, dass Entwickler / Benutzer in anderen Organisationen ihre gesamte known_hosts Datei aus Frustration löschen, als sie diese Nachricht sahen. Ich gehe zwar nicht so weit, aber ich weiß, dass es eine elegantere Art gibt, damit umzugehen.

Tipps?

[root@xt ~]# ssh las-db1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.
ewwhite
quelle
Wir haben das gleiche Problem. Ich habe keine Erfahrung mit Mesh ti.arc.nasa.gov/opensource/projects/mesh der NASA, aber es ist auf meiner Liste der zu überprüfenden Technologien.
Andrew Gilmartin
1
Warum nicht den alten Schlüssel kopieren, wenn Sie einen Server neu installieren / neu zuweisen?
Random832
@ Random832 Es lässt sich nicht skalieren, wenn Sie viele Server haben ... Oder wenn Sie eine Labor- / Testumgebung haben, in der Sie häufig IP-Adressen recyceln. Oder ein anderer Fall; Ein ungeplanter Serveraustausch, bei dem der ursprüngliche Server nicht verfügbar ist ...
ewwhite
3
Die große Frage, die ich habe, ist: Wie kommst du in diese Situation? Wenn Sie Hostnamen wiederverwenden, empfiehlt es sich möglicherweise, den Hostnamensstandard ( tools.ietf.org/html/rfc1178 ) zu überdenken . Wenn Sie IP-Adressen erneut verwenden, sollten Sie die ssh-Schlüssel im Rahmen des gleichen Verfahrens wie die Außerbetriebnahme des vorherigen Servers für diese IP-Adresse außer Betrieb nehmen. Wenn Sie in einer "Webscale" -Umgebung arbeiten, in der die Wiederverwendung von IP-Adressen automatisch erfolgt und semi-bedeutungslose Hostnamen obligatorisch sind, sollten Sie über einen ausreichend automatisierten Server-Lebenszyklus-Prozess verfügen, um die SSH-Schlüssel zu reparieren
Paul Gear

Antworten:

47

Mit dem ssh-keygenBefehl können Sie bestimmte Einträge nach Host entfernen:

ssh-keygen -R las-db1

Wenn Sie diesen Befehl nicht haben, können Sie immer sed verwenden:

sed -i '/las-db1/d' /root/.ssh/known_hosts
Kyle Brandt
quelle
3
Die Verwendung von ssh-keygen -R zur Behebung des Problems mit in Konflikt stehenden Schlüsseln schlägt der ssh-Client in Ubuntu in der Fehlermeldung vor, wenn dieses Problem auftritt.
Kenny Rasschaert
Mir war dieser Wechsel zum ssh-keygenBefehl nicht bekannt . Gut!
ewwhite
10
Denken Sie daran, zu überprüfen und sicherzustellen, dass jemand nicht wirklich "ETWAS SCHLECHTES TUN!"
Michael Hampton
1
Stellen Sie sicher, dass Sie dies nicht bei einer Konferenz tun!
Paul Gear
2
@ewwhite Sie füllen die /etc/ssh/known_hostsDatei in Ihrem Netzwerk mit den entsprechenden Hostschlüsseln (verwaltet mit Puppet usw.) oder mit Ihrer persönlichen ~ / .ssh / known_hosts-Datei (dazu können ssh-keyscanSie eine bekannte gute / sichere Datei überfliegen) Verbindung). Vorbehaltlich dieser (und vorausgesetzt, Sie kümmern sich überhaupt nicht um Sicherheit) UserKnownHostsFile=/dev/nullund StrictHostKeyChecking=noin Ihrem ~/.ssh/config file(oder übergeben Sie die Optionen mit ssh -o)
voretaq7
25

Als Marionettenbenutzer kann ich dieses Problem lösen, indem ich auf meinem Marionettenserver meine SSH-Hostschlüssel sammle und sie auf allen meinen Systemen veröffentliche, die SSH-Verbindungen herstellen.

Auf diese Weise muss ich mich nicht darum kümmern, sie zu entfernen. In neunundneunzig Prozent der Fälle hat Puppet die Schlüssel für mich ausgeführt und aktualisiert, da meine Agenten alle dreißig Minuten ausgeführt werden. Die Ausnahmen für mich sind sehr selten, und daher macht mir eine schnelle Bearbeitung der systemweiten known_hosts nichts aus, wenn ich nicht bereit bin zu warten.

class ssh::hostkeys {

  @@sshkey { "${::clientcert}_rsa":
    type => rsa,
    key => $sshrsakey,
    tag => 'rsa_key',
  }

  if 'true' == $common::params::sshclient {
    Sshkey <<| tag == 'rsa_key' |>> {
      ensure => present
    }
  }

  file {'/etc/ssh/ssh_known_hosts':
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 0644,
  }

}
Zoredache
quelle
+1 Guter Schritt für die Integration von Konfigurationsmanagement-Tools.
ewwhite
4

Ich möchte einen Vorschlag hinzufügen, der Ihnen in ganz bestimmten Fällen helfen kann, in denen die Sicherheit weniger wichtig ist.

Ich habe eine Laborumgebung mit Computern, die häufig neu installiert werden. Jedes Mal, wenn dies passiert, werden neue Host-Schlüssel generiert (ich könnte den Host-Schlüssel wahrscheinlich irgendwo speichern und im Post-Install-Skript festlegen).

Da die Sicherheit in dieser Testumgebung für mich kein Problem darstellt und sich die Schlüssel so oft ändern, enthält meine .ssh / config-Datei Folgendes:

Host lab-*
  User kenny
  IdentityFile ~/.ssh/lab_id_rsa
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

Dies stellt sicher, dass das Herstellen einer Verbindung zu meinen Laborgeräten nie wieder zu diesem Fehler führt und mein ssh-Client nur eine Verbindung herstellt, ohne den Hostschlüssel zu überprüfen.

Dies ist etwas, das Sie nur tun sollten, wenn die Sicherheit Sie überhaupt nicht interessiert, da Sie dadurch für einen Man-in-the-Middle-Angriff verwundbar sind.

Kenny Rasschaert
quelle
1
Scheint riskant. Ich möchte die Hostüberprüfung beibehalten, da es sich bei einigen dieser Systeme um öffentlich zugängliche Systeme handelt.
ewwhite
1
Aus diesem Grund erwähnte er, dass diese Methode nur für "wo die Sicherheit von geringerer Bedeutung ist / keine Rolle spielt". Private Netzwerke / Laborumgebungen eignen sich perfekt für diese Konfiguration. Multi-Machine-Auto-Scaling-Produktions- / Public-Facing-Systeme, nicht so sehr.
Dannosaur
4

Gemäß der Release-Information zu openssh 5.6 müssen Sie keine Hosts-Schlüssel mehr verwenden:

Bei der hostbasierten Authentifizierung werden möglicherweise jetzt Zertifikat-Hostschlüssel verwendet. CA-Schlüssel müssen in einer Datei known_hosts mithilfe der Markierung @ cert-authority wie in sshd (8) beschrieben angegeben werden.

Warnung : Ich habe noch nie von jemandem gehört, der diese Funktion in der Produktion einsetzt. Die Verwendung erfolgt auf eigenes Risiko (aber ich glaube, dass OpenSh-Entwickler paranoid genug sind, um eine solche Killer-Funktion nicht ohne viel Testen und Code-Auditing freizugeben).


quelle
2

SSHFP DNS ResourceRecord kann helfen, je nachdem, wie viel Ihr ssh-Client davon profitiert. Speichern Sie dort oben alle Fingerabdrücke Ihres öffentlichen SSH-Schlüssels mit dem Hostnamen.

Implementieren Sie zuvor DNSSEC oder DNS über SSL.
http://www.ietf.org/rfc/rfc4255.txt

FreeIPA.org verwaltet Host- und Benutzerschlüssel sowie PKI-Zertifikate. Außerdem werden automatisch SSHFP-DNS-Einträge hochgeladen, wenn neue Schlüssel erstellt werden.

Der System Security Services Daemon (SSSD) kann so konfiguriert werden, dass Host-SSH-Schlüssel zwischengespeichert und abgerufen werden, sodass Anwendungen und Dienste nur an einem Ort nach Host-Schlüsseln suchen müssen. Da SSSD FreeIPA als einen seiner Identitätsinformationsanbieter verwenden kann, bietet FreeIPA ein universelles und zentrales Repository für Schlüssel. Administratoren müssen sich nicht um das Verteilen, Aktualisieren oder Überprüfen von Host-SSH-Schlüsseln kümmern.

http://docs.fedoraproject.org/en-US/Fedora/17/html/FreeIPA_Guide/host-keys.html

rjt
quelle