Fügen Sie für SSH nicht hostkey zu known_hosts hinzu
111
Ich möchte über SSH eine Verbindung zu einem Host herstellen, möchte jedoch nicht, dass der Hostname zu meinem Host hinzugefügt wird ~/.ssh/known_hosts.
Funktioniert wie vorgesehen, es wird jedoch immer gemeldet: "Warnung: Der Liste der bekannten Hosts wurde dauerhaft 'Hostname, IP' (RSA) hinzugefügt." Das habe ich mit: 2> & 1 | behoben grep -v "^Warning: Permanently added"
Guillaume Boudreau
3
füge -o "LogLevel ERROR" hinzu und es wird sich nicht mehr mit Warnungen beschweren
John
1
Hinweis: Aufforderung zur Unterdrückung der Meldung "Warnung: Der Liste der bekannten Hosts wurde dauerhaft" Hostname, IP "(RSA) hinzugefügt." wurde den Betreuern gemeldet bugzilla.mindrot.org/show_bug.cgi?id=2413
Ben Creasy
2
Piping to grepführt stdout und stderr zusammen. auch der Exit-Status kann sich ändern. Bei der Verwendung bash, wird es besser sein Prozess Substitution zu verwenden loszuwerden, die Nachricht zu erhalten: ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]. Es wird die Pipe und damit die entsprechenden Änderungen bei der Behandlung des Ausgangsstatus vermieden.
Alex O
1
@ John Es ist besser, eine der anderen Methoden in diesen Kommentaren zu verwenden, da Sie sonst eine Sicherheitslücke einführen, da möglicherweise andere, nicht verwandte Warnungen ausgeblendet werden
Jon Bentley,
97
Wenn Sie dieses Verhalten wünschen, weil Sie mit Cloud-Servern (AWS EC2, Rackspace CloudServers usw.) arbeiten oder ständig neue Images in Vagrant bereitstellen, möchten Sie möglicherweise Ihre SSH-Konfiguration aktualisieren, anstatt Bash-Aliase oder weitere Optionen in der Befehlszeile.
Erwägen Sie, Folgendes hinzuzufügen:
Host *.mydomain.com
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
User foo
LogLevel QUIET
Verwenden Sie so streng wie möglich reguläre Ausdrücke, damit der Host sicher ist.
Wenn Sie den LogLevel auf QUIET setzen, wird die von Guillaume erwähnte Warnung nicht angezeigt
Sie sollten wirklich versuchen, StrictHostKeyChecking nicht vollständig zu deaktivieren, daher ist die Antwort von cclark ein großartiger Kompromiss für die Arbeit mit Cloud-Servern.
Alex Recarey
Dies erwies sich für mich als sehr hilfreich, da ich Shipit (ein JavaScript-Bereitstellungstool) gegen Vagrant verwendete. Ich konnte die Parameter, die Shipit an SSH weiterleitete, nicht leicht ermitteln, sodass ich das Tool umgehen und ihm mitteilen konnte, was ich getan hatte und nicht wollte, dass es sich daran erinnerte.
John Munsch
1
LogLevel ist das, wonach ich gesucht habe. Es hat den zusätzlichen Vorteil, dass der vom Unternehmen konfigurierte Hinweis beim Ausführen von Skripten nicht angezeigt wird! (Ich laufe jetzt mit Googlevel-Fehler)
Anshu Prateek
In welche Datei füge ich das ein?
Wim Deblauwe
Dies ist Ihre SSH-Konfigurationsdatei. Unter Linux oder MacOS befindet sich die Datei im Allgemeinen in einem Verzeichnis mit dem Namen .ssh in Ihrem Ausgangsverzeichnis und dem Namen config - ~ / .ssh / config
cclark.
8
Ich möchte Ihren known_hosts den Hostschlüssel hinzufügen (die Leute, die diese Dienste ausführen, sind meiner Erfahrung nach zumindest schlau genug, um ihre Hostschlüssel zwischen Computern mit demselben Hostnamen konsistent zu halten) und dann StrictHostKeyChecking, CheckHostIP und aktivieren Wenn Sie mit LogLevel ERROR protokollieren, erhalten Sie die beste Erfahrung, ohne an Sicherheit einzubüßen. (Ok, ohne CheckHostIP müssen Sie DNS vertrauen, das ist eine riesige Lücke ohne weit verbreitetes DNSSEC oder ähnliches. Aber das werden wir für den Moment einfach unter den Teppich kehren.)
Ich verwende eine schreibgeschützte Datei "known_hosts", muss also etwas unternehmen, oder ich erhalte endlose Warnungen, dass ich keine Einträge zu "known_hosts" hinzufügen kann.
Was ich benutze:
Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR
Ich möchte, dass diese Dienste ihre SSH-Hostschlüssel über HTTPS auf ihren Websites veröffentlichen, damit ich sie explizit kopieren kann, ohne mich zuerst verbinden zu müssen und mich möglicherweise einem MITM-Angriff aussetzen zu müssen.
Sie sollten in der Lage sein, Ihren SSH-Verbindungen zu vertrauen, imho. Machen Sie es nicht nur still über Ihre Risiken.
Sylvainulg
3
Kommt wirklich drauf an. Wir haben Entwicklungsumgebungen, die jede Woche heruntergefahren und neu erstellt werden. Ihre A-Datensätze bleiben gleich, aber ihr Hostschlüssel wird jedes Mal generiert, wenn er erstellt wird. Wir können die Host-Schlüssel nicht beibehalten, da der A-Datensatz nur in einer Datenbank basierend auf einem Umgebungsnamen definiert ist und Umgebungsnamen jederzeit verschrottet oder neu erstellt werden können. Daher ist die oben beschriebene Problemumgehung wirklich nützlich.
Alex Berry
2
Haben Sie versucht zu deaktivieren StrictHostKeyChecking? Sie können dies mit der -oOption oder in der Konfigurationsdatei tun ~/.ssh/config.
Ich benutze das schon. Dies hat jedoch einen anderen Effekt: Es verringert die Strenge für die Host-Schlüsselprüfung. Dh wenn der Host unbekannt ist, wird die Verbindung trotzdem hergestellt, wenn Sie diese Option deaktivieren. Somit wird der Host trotzdem gespeichert. Aber ich denke, ich habe die richtige Lösung gefunden (siehe meine Antwort).
Albert
0
Ich fand die folgenden .ssh / config-Einträge nützlich (LAN mit DHCP und DNS):
CheckHostIP no
Host *.*
CheckHostIP yes
Das Ergebnis ist, dass die lokalen Computernamen "zora" oder "goron" nicht nach dynamisch zugewiesenen IP-Adressen suchen. Die statischen IP-Adressen von www.mycompany.com oder node42.planetlab.com werden jedoch weiterhin bestätigt.
grep -v "^Warning: Permanently added"
grep
führt stdout und stderr zusammen. auch der Exit-Status kann sich ändern. Bei der Verwendungbash
, wird es besser sein Prozess Substitution zu verwenden loszuwerden, die Nachricht zu erhalten:ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]
. Es wird die Pipe und damit die entsprechenden Änderungen bei der Behandlung des Ausgangsstatus vermieden.Wenn Sie dieses Verhalten wünschen, weil Sie mit Cloud-Servern (AWS EC2, Rackspace CloudServers usw.) arbeiten oder ständig neue Images in Vagrant bereitstellen, möchten Sie möglicherweise Ihre SSH-Konfiguration aktualisieren, anstatt Bash-Aliase oder weitere Optionen in der Befehlszeile.
Erwägen Sie, Folgendes hinzuzufügen:
quelle
Ich möchte Ihren known_hosts den Hostschlüssel hinzufügen (die Leute, die diese Dienste ausführen, sind meiner Erfahrung nach zumindest schlau genug, um ihre Hostschlüssel zwischen Computern mit demselben Hostnamen konsistent zu halten) und dann StrictHostKeyChecking, CheckHostIP und aktivieren Wenn Sie mit LogLevel ERROR protokollieren, erhalten Sie die beste Erfahrung, ohne an Sicherheit einzubüßen. (Ok, ohne CheckHostIP müssen Sie DNS vertrauen, das ist eine riesige Lücke ohne weit verbreitetes DNSSEC oder ähnliches. Aber das werden wir für den Moment einfach unter den Teppich kehren.)
Ich verwende eine schreibgeschützte Datei "known_hosts", muss also etwas unternehmen, oder ich erhalte endlose Warnungen, dass ich keine Einträge zu "known_hosts" hinzufügen kann.
Was ich benutze:
Ich möchte, dass diese Dienste ihre SSH-Hostschlüssel über HTTPS auf ihren Websites veröffentlichen, damit ich sie explizit kopieren kann, ohne mich zuerst verbinden zu müssen und mich möglicherweise einem MITM-Angriff aussetzen zu müssen.
quelle
Verwenden Sie dies für eine einzelne SSH-Sitzung
quelle
Ich schlage vor
Über
So erhalten Sie immer noch "Hostname konnte nicht aufgelöst werden" und andere solche Fehler
quelle
Haben Sie versucht zu deaktivieren
StrictHostKeyChecking
? Sie können dies mit der-o
Option oder in der Konfigurationsdatei tun~/.ssh/config
.quelle
Ich fand die folgenden .ssh / config-Einträge nützlich (LAN mit DHCP und DNS):
Das Ergebnis ist, dass die lokalen Computernamen "zora" oder "goron" nicht nach dynamisch zugewiesenen IP-Adressen suchen. Die statischen IP-Adressen von www.mycompany.com oder node42.planetlab.com werden jedoch weiterhin bestätigt.
quelle