216 Stimmen

ssh: Die Authentizität des Hosts 'hostname' kann nicht festgestellt werden

Wenn ich per ssh auf einen Rechner zugreife, erhalte ich manchmal diese Fehlerwarnung und werde aufgefordert, "ja" oder "nein" zu sagen. Dies verursacht einige Probleme, wenn von Skripten, die automatisch ssh zu anderen Maschinen laufen.

Warnmeldung:

The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

Gibt es eine Möglichkeit, automatisch "Ja" zu sagen oder dies zu ignorieren?

39 Stimmen

Davon würde ich abraten. Sie müssen herausfinden, warum Sie diese Fehler erhalten. Andernfalls öffnen Sie sich für einen Man-in-the-Middle-Angriff, vor dem diese Fehler Sie schützen sollen.

4 Stimmen

Dies könnte durch einen Wechsel des Servers verursacht werden, der diesen ssh-Schlüssel verwendet, oder dadurch, dass jemand zwischen Ihnen und dem Server sitzt und alles mithört, was Sie senden/empfangen.

0 Stimmen

Was könnte der Grund für diesen Fehler sein?

13voto

Sfisioza Punkte 3670

Diese Warnung wird aufgrund der Sicherheitsfunktionen ausgegeben, deaktivieren Sie diese Funktion nicht.

Sie wird nur einmal angezeigt.

Wenn es nach der zweiten Verbindung immer noch auftritt, liegt das Problem wahrscheinlich im Schreiben an die known_hosts Datei. In diesem Fall erhalten Sie auch die folgende Meldung:

Failed to add the host to the list of known hosts 

Sie können das Problem beheben, indem Sie den Besitzer der Datei ändern oder die Berechtigungen der Datei so ändern, dass sie für Ihren Benutzer schreibbar ist.

sudo chown -v $USER ~/.ssh/known_hosts

12voto

Carlos M G T Punkte 351

Bearbeiten Sie Ihre Konfigurationsdatei, die sich normalerweise unter '~/.ssh/config' befindet, und fügen Sie am Anfang der Datei die folgenden Zeilen ein

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

Benutzer eingestellt auf your_login_user sagt, dass diese Einstellungen zu your_login_user gehören
Wenn StrictHostKeyChecking auf no gesetzt ist, wird die Aufforderung nicht angezeigt
IdentityFile ist der Pfad zum RSA-Schlüssel

Das funktioniert bei mir und meinen Skripten, viel Glück für Sie.

0 Stimmen

Danke, das hat wirklich den Tag gerettet. Aber was ist die letzte Zeile IdentityFile für? Es scheint auch ohne sie zu funktionieren.

0 Stimmen

En IdentityFile sollte der Dateiname des privaten Schlüssels (der "Identitätsschlüssel") sein. Siehe ssh.com/academy/ssh/identity-key y ssh.com/academy/ssh/

9voto

ARK Punkte 3036

Tun Sie dies -> chmod +w ~/.ssh/known_hosts . Dies fügt der Datei eine Schreibberechtigung unter ~/.ssh/known_hosts . Danach wird der entfernte Host zur Liste der known_hosts Datei, wenn Sie sich das nächste Mal mit ihr verbinden.

8voto

Robert Chen Punkte 4949

Idealerweise sollten Sie eine selbstverwaltete Zertifizierungsstelle einrichten. Beginnen Sie mit der Erzeugung eines Schlüsselpaares: ssh-keygen -f cert_signer

Signieren Sie dann den öffentlichen Hostschlüssel jedes Servers: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

Dadurch wird ein signierter öffentlicher Host-Schlüssel erzeugt: /etc/ssh/ssh_host_rsa_key-cert.pub

Unter /etc/ssh/sshd_config zeigen die HostCertificate zu dieser Datei: HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

Starten Sie den sshd-Dienst neu: service sshd restart

Fügen Sie dann auf dem SSH-Client Folgendes zu ~/.ssh/known_hosts : @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

Der obige Text enthält:

  • @cert-authority
  • Die Domäne *.example.com
  • Der vollständige Inhalt des öffentlichen Schlüssels cert_signer.pub

Die cert_signer öffentlichen Schlüssel vertraut jedem Server, dessen öffentlicher Hostschlüssel von der cert_signer privaten Schlüssel.

Obwohl dies eine einmalige Konfiguration auf der Client-Seite erfordert, können Sie mehreren Servern vertrauen, auch solchen, die noch nicht bereitgestellt wurden (vorausgesetzt, Sie signieren jeden Server).

Für weitere Einzelheiten siehe diese Wikiseite .

5voto

Chintamani Manjare Punkte 1393

Unter Bezugnahme auf die Antwort von Cori habe ich sie geändert und den folgenden Befehl verwendet, der funktioniert. Ohne exit Der verbleibende Befehl protokollierte tatsächlich auf dem entfernten Rechner, was ich im Skript nicht wollte

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X