Wie vermeide ich, dass ssh um Erlaubnis bittet?

57

Wir versuchen, die Installation von Oracle-Knoten für die RAC-Installation zu beschleunigen. Dies setzt voraus, dass wir ssh so installieren und konfigurieren, dass kein Passwort abgefragt wird.

Das Problem ist: Bei der ersten Verwendung werden wir dazu aufgefordert

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

Gibt es eine Möglichkeit, dies zu vermeiden, oder sind wir dazu verdammt, auf jedem Server mindestens einmal eine Verbindung von jedem Server manuell herzustellen?

Nicolas de Fontenay
quelle

Antworten:

90

Stellen Sie StrictHostKeyChecking noin Ihrer /etc/ssh/ssh_configDatei ein, wo es sich um eine globale Option handelt, die von jedem Benutzer auf dem Server verwendet wird. Oder legen Sie es in Ihrer ~/.ssh/configDatei fest, wo es nur für den aktuellen Benutzer der Standard ist. Oder Sie können es in der Befehlszeile verwenden:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

Hier ist eine Erklärung, wie dies funktioniert man ssh_config (oder sehen Sie sich diese aktuellere Version an ):

StrictHostKeyChecking

      Wenn dieses Flag auf "yes" gesetzt ist, fügt ssh der $HOME/.ssh/known_hostsDatei niemals automatisch Host-Schlüssel hinzu und weigert sich, eine Verbindung zu Hosts herzustellen, deren Host-Schlüssel sich geändert hat. Dies bietet maximalen Schutz vor Trojaner-Angriffen, kann jedoch ärgerlich sein, wenn die /etc/ssh/ssh_known_hostsDatei schlecht gepflegt wird oder häufig Verbindungen zu neuen Hosts hergestellt werden. Diese Option zwingt den Benutzer, alle neuen Hosts manuell hinzuzufügen. Wenn dieses Flag auf "nein" gesetzt ist, wird sshfügt automatisch neue Host-Schlüssel zu den vom Benutzer bekannten Host-Dateien hinzu. Wenn dieses Flag auf "fragen" gesetzt ist, werden neue Host-Schlüssel zu den bekannten Host-Dateien des Benutzers hinzugefügt, nachdem der Benutzer bestätigt hat, dass er dies wirklich tun möchte, und ssh wird die Verbindung zu Hosts ablehnen, deren Host-Schlüssel sich geändert hat . Die Host-Schlüssel bekannter Hosts werden in jedem Fall automatisch überprüft. Das Argument muss "ja", "nein" oder "fragen" sein. Die Standardeinstellung ist "fragen".

Tim Kennedy
quelle
1
+1, ich auch das für meine Server. Und um es klar zu machen, die Nachricht in der Frage kommt vom ssh-Client auf dem verbindenden Client-Computer und nicht vom Server.
Patkos Csaba
3
Diese Antwort scheint ein Sicherheitsproblem zu sein.
SunSparc
25

ssh-keyscan - Sammeln Sie öffentliche ssh-Schlüssel

Wenn Sie die Liste der Hosts, zu denen Sie eine Verbindung herstellen, bereits kennen, können Sie Folgendes ausgeben:

ssh-keyscan host1 host2 host3 host4

Sie können die -HOption angeben, dass der Hash die Ergebnisse wie in den Standardeinstellungen von ssh verwendet

Sie können -t keytypeauch angebendsa , wer der Schlüsseltyp ist , rsaoder ecdsaob Sie bevorzugen, welchen Schlüsseltyp Sie anstelle des Standardschlüssels verwenden möchten .

Sobald Sie es ausgeführt ssh-keyscanhaben, ist Ihre Datei "known-hosts" bereits ausgefüllt, und Sie werden nicht mehr von ssh nach der Erlaubnis gefragt, einen neuen Schlüssel hinzuzufügen.

Kurtm
quelle
1
Ich bin ein wenig verwirrt über den Kommentar "Wird bereits ausgefüllt" ... known_hosts wird nach dem Ausführen weder erstellt noch geändert. Sie meinen, der Inhalt kann an die Datei weitergeleitet werden, um sie zu füllen?
Schwieb
4
Bestätigung mit techrepublic.com/article/… . ssh-keyscan -H myhost >> ~/.ssh/known_hosts, oder für serverweite,/etc/ssh/ssh_known_hosts
cole
12

Sie können den Fingerabdruck den bekannten_Hosts jedes Servers hinzufügen. Für einen einzelnen Benutzer:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
David Souther
quelle
3
Dies ist nicht mehr der richtige Weg, seitdem Hashing eingeführt wurde.
Deim0s
10

Host ignorieren

Ignorieren Sie das HostKeyChecking. Dazu benutze ich zB:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null [email protected]

Host hinzufügen

Fügen Sie .ssh/known_hostsvor der ersten Verbindung den Fingerabdruck des Hosts / Servers hinzu . Dies ist der sicherere Weg.

Xebeche
quelle
Hallo. Oracle gibt den Befehl ssh aus, sodass ich keine Kontrolle darüber habe, wie dies ausgeführt wird.
Nicolas de Fontenay
Upvoted. Die meisten Antworten, die ich gesehen habe, verpassen die Erwähnung, dass dev die bekannte Hosts-Datei auf null setzt. Dies macht den Befehl viel benutzerfreundlicher und ruiniert keine existierende Konfiguration.
Alex
(2) Sicher, das Hinzufügen des Fingerabdrucks zur bekannten Hosts-Datei ist der ideale Ansatz - aber wie macht man das? (1) Warum ist es von Vorteil, die vom Benutzer bekannte Hosts-Datei auf  /dev/nullfestzulegen? Wäre es nicht besser, ssh -oStrictHostKeyChecking=no [email protected]den Fingerabdruck des Servers einmal in die $HOME/.ssh/known_hostsDatei zu übernehmen, damit nachfolgende Verbindungen ohne Aufforderung zur Bestätigung fortgesetzt werden können?
G-Man
3

Führen Sie das folgende Snippet aus, bevor Sie es versuchen.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

PS: Streng nicht für Produktionsserver, Vorsicht vor ManInMiddle

147,3k
quelle
0

Ich mag Tims Antwort für einmalige Dinge, aber wenn dies ein Host ist, zu dem Sie regelmäßig eine Verbindung herstellen möchten, würde ich einen Eintrag in Ihrer ~ / .ssh / config erstellen (erstellen, wenn die Datei nicht existiert).

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
Jaime
quelle