
ssh
Clients (standardmäßig, zumindest in Ubuntu 18.04 und FreeBSD 12) prüfen immer, ob der Schlüsselfingerabdruck des Servers in der known_hosts
Datei enthalten ist.
Ich habe einen Host im LAN, der Dual-Boot hat; beide Betriebssysteme verwenden dieselbe statische IP. Ich möchte eine Verbindung herstellen ssh
zubeidevon ihnen, ohne dass Fehler auftreten.
Dies verstößt offensichtlich gegen die durchgeführten Prüfungen known_hosts
: Wenn ich einen Fingerabdruck akzeptiere, wird er mit der Host-IP in Verbindung gebracht; wenn das Betriebssystem gewechselt wird, ändert sich der Fingerabdruck, während die IP gleich bleibt, und ich muss ihn manuell löschen, known_hosts
bevor ich mich wieder verbinden kann. Ich hätte gerne diesen einen Fingerabdruck,oderdas andere wird akzeptiert, wenn man dieses geistige Eigentum berücksichtigt.
Gibt es einClient-SeiteLösung zur Behebung dieses Problems?
Ich verwende OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018
und OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
.
Notiz: Ich möchte keine „Keine Überprüfung“ des Fingerabdrucks des Servers. Ich frage mich nur, ob es möglich ist, zwei alternative Fingerabdrücke (nicht nur einen) der IP-Adresse des Servers zuzuordnen.
Antwort1
Ihr Problem ist, dass Hostschlüssel genau das sind, nämlich Schlüssel für den Host. Es soll eigentlich nur einen pro Host geben. Natürlich gibt es mehrere, weil es mehrere Schlüsseltypen gibt, aber ich würde es vermeiden, mich darauf zu verlassen, dass Schlüsseltypen Ihnen mehrere akzeptable Schlüssel für einen einzelnen Host geben.
Auf der Serverseite
Mein erster Vorschlag ist, dass Sie sorgfältig überlegen, ob Sie dies wirklich auf der Clientseite tun möchten. Sie könnten diese beiden Betriebssysteme als denselben Host behandeln und einfach den Hostschlüssel von einem zum anderen kopieren.
Wenn Sie diese von OpenSSH kopieren, /etc/ssh/ssh_host*
können Sie sie auf anderen Betriebssystemen verwenden. Allerdings müssen sie je nach verwendetem SSH-Server möglicherweise neu formatiert werden.
Aber ...
Darf ich fragen, warum Sie serverseitige Lösungen ausgeschlossen haben? Wäre es nicht am einfachsten, wenn Sie versuchen würden, beide Betriebssysteme dazu zu bringen, denselben Hostschlüssel zu verwenden? – Philip Couling
@PhilipCouling Teilweise wegen der Benutzerfreundlichkeit: eines der Betriebssysteme ist Windows. Teilweise, um keine Schlüssel von einem Host auf einen anderen zu übertragen, was manchmal nicht empfohlen wird. Aber der Hauptgrund ist: Ich möchte ein gewisses Maß an Flexibilität bei der SSH-Client-Konfiguration erreichen, wenn das möglich ist. – BowPark
Ich glaube, Sie suchen nach einer Möglichkeit, die beiden Betriebssysteme als unterschiedliche Hosts zu behandeln, obwohl sie dieselbe IP-Adresse und Portnummer haben.
Auf der Clientseite
Der wahrscheinlich zuverlässigste Weg ist, für jedes Betriebssystem eine hostspezifische Konfiguration festzulegen. Bearbeiten (oder erstellen) Sie Folgendes, ~/.ssh/config
um Folgendes hinzuzufügen:
Host windows.dualbootbox
Hostname 192.168.10.20
UserKnownHostsFile ~/.ssh/windows.dualbootbox.known_hosts
Host ubuntu.dualbootbox
Hostname 192.168.10.20
UserKnownHostsFile ~/.ssh/ubuntu.dualbootbox.known_hosts
Sie müssen nicht angeben, Hostname
ob jedes Host
bereits in eine IP aufgelöst wird. Sieheman ssh_config
für weitere Konfigurationsoptionen.
Mit der obigen Konfiguration können Sie dann entweder:
ssh [email protected]
ssh [email protected]
Antwort2
Es gibt hierfür mehrere Möglichkeiten. Eine davon ist die Verwendung StrictHostKeyChecking no
während der SSH-Verbindung zu Ihren Hosts. Dadurch werden keine Einträge in known_hosts erstellt.
ssh -o StrictHostKeyChecking=no <ip>
Oder
ssh -o UserKnownHostsFile=/dev/null <ip>
Oder Sie können Ihre .ssh/config-Datei nach Bedarf ändern.