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.

Wie kann ich das machen?

Antworten:


99
-o "UserKnownHostsFile /dev/null"

sollte arbeiten.


3
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.


7

Verwenden Sie dies für eine einzelne SSH-Sitzung

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

4
Dies fügt einer akzeptierten Antwort auf eine 5 Jahre alte Frage nichts Neues hinzu.
JakeGould

5

Ich schlage vor

LogLevel ERROR

Über

LogLevel QUIET

So erhalten Sie immer noch "Hostname konnte nicht aufgelöst werden" und andere solche Fehler


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.