2010-11-12 5 views
36

Ich habe SSH-Schlüsselpaare zwischen meinem Desktop und zwei Servern und von den Servern auf meinem Desktop eingerichtet, aber nach der Neuinstallation des Betriebssystems auf meinem Desktop kann ich ' t re-establish gehen die Keypair in meinem Desktop durch das:Wie ssh-Schlüsselpaar einrichten, wenn "Host-Schlüsselverifizierung fehlgeschlagen ist"

mkdir ~/.ssh 
chmod 700 ~/.ssh 
ssh-keygen -t 
ssh-copy-id [email protected] 

bekomme ich folgende Fehlermeldung:

(Namen in kursiv geändert, um die unschuldigen zu schützen Mein Desktop Ubuntu ist, und ich kann‘ t finden Sie die Antwort here)

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is ab:cd:ef:gh Please contact your system administrator. Add correct host key in /home/user/.ssh/known_hosts to get rid of this message. Offending key in /home/user/.ssh/known_hosts:1 RSA host key for user.server has changed and you have requested strict checking. Host key verification failed.

Antwort

91
ssh-keygen -R hostname 

Dies wird der säumige Schlüssel aus dem known_hosts

Der Mann Seite Eintrag liest löscht:

-R hostname Removes all keys belonging to hostname from a known_hosts file. This option is useful to delete hashed hosts (see the -H option above).

+0

Warum funktioniert das? – locoboy

+1

Ich habe das gleiche Problem, aber legitim. Mein Laptop bewegt sich zwischen zwei Netzwerken (Zuhause und Arbeit) und es gibt Überschneidungen. Ich muss ssh zu Maschine A, wenn ich bei der Arbeit bin und Maschine B, wenn ich zu Hause bin, aber beide Maschinen haben die gleiche IP-Adresse. Ist es möglich, beide gültigen Einträge in meiner known_hosts-Datei trotz des IP-Adresskonflikts zu behalten? – rev

+3

+1 "Überprüfung des Hostschlüssels fehlgeschlagen" bedeutet, dass der Hostschlüssel des Remote-Hosts geändert wurde. Ssh speichert die Hostschlüssel der Remote-Hosts in ~/.ssh/known_hosts. Sie können diese Textdatei entweder manuell bearbeiten und den alten Schlüssel entfernen (Sie können die Zeilennummer in der Fehlermeldung sehen) oder verwenden Sie ssh-keygen -R Hostname –

1
rm -f /home/user/.ssh/known_hosts 

oder öffnen Sie es und löschen Sie den Eintrag für die säumige IP/Hostname

(P. S. Es sagt Ihnen genau dies in der Fehlermeldung Sie auf dem Laufenden)

+0

Ich hatte dies versucht, aber löschte die Dateien vom Host (meinem Desktop) anstelle des Gastes (der Server, den ich von meinem Desktop aus angemeldet hatte). Danke für die Erinnerung ... –

+5

Sie müssen nicht die ganze Datei löschen ... – ephemient

+0

@ephemient: das ist ordnungsgemäß nach dem Beispiel, wie Sie die gesamte Datei löschen;) Ich öffnete die known_hosts Datei auf meinem Computer und es sah für mich ziemlich kryptisch aus. Ich mag deine Antwort. Sieht so aus, als hätte ich dich leicht geschlagen! –

3

Wenn Sie sicher der Server sind korrekt ist, wird sed -i 1d ~/.ssh/known_hosts Linie 1 von Ihrem lokalen ~/.ssh/known_hosts löschen. Der neue richtige Schlüssel wird der Datei beim nächsten Verbindungsaufbau hinzugefügt.

+2

Schöne Lösung. Aber geht das nicht davon aus, dass der fragliche Server (in diesem Fall mein Desktop) die erste Zeile in der Datei war? Ich fand, dass "ssh-keygen -F hostname" die Zeile sagt, dass der Hostname Schlüssel eingeschaltet ist, also würde vermutlich sed-i nd ~/.ssh/know_hosts funktionieren, wenn n die Zeilennummer wäre. –

+3

@David: Die Ausgabe, die Sie eingefügt haben oben sagt "Beleidigender Schlüssel in /home/user/.ssh/known_hosts:1". Sie wissen, was die Zeilennummer bereits ist, müssen nicht 'ssh-keygen -F 'ausführen. – ephemient

+0

Ich wusste nicht, dass das die Nummer war ... danke, dass du darauf hingewiesen hast. –

1

auch manchmal gibt es Situation, wenn Sie auf die serielle Konsole arbeiten, dann obigen Befehl Einchecken Ausführlicher Modus -v wird Ihnen zeigen, dass/dev/tty nicht existiert, während es tut.

Im obigen Fall entfernen Sie einfach/dev/tty und erstellen einen Symlink von/dev/ttyS0 nach/dev/tty.

8

Höchstwahrscheinlich befindet sich der Remote-Host ip oder ip_alias nicht in der Datei ~/.ssh/known_hosts. Sie können den folgenden Befehl verwenden, um den Hostnamen der Datei "known_hosts" hinzuzufügen.

$ssh-keyscan -H -t rsa ip_or_ipalias >> ~/.ssh/known_hosts

Auch habe ich das folgende Skript erzeugt zu überprüfen, ob die bestimmte IP oder ipalias in der know_hosts Datei.

#!/bin/bash 
#Jason Xiong: Dec 2013 
# The ip or ipalias stored in known_hosts file is hashed and 
# is not human readable.This script check if the supplied ip  
# or ipalias exists in ~/.ssh/known_hosts file 

if [[ $# != 2 ]]; then 
    echo "Usage: ./search_known_hosts -i ip_or_ipalias" 
    exit; 
fi 
ip_or_alias=$2; 
known_host_file=/home/user/.ssh/known_hosts 
entry=1; 

cat $known_host_file | while read -r line;do 
    if [[ -z "$line" ]]; then 
    continue; 
    fi 
    hash_type=$(echo $line | sed -e 's/|/ /g'| awk '{print $1}'); 
    key=$(echo $line | sed -e 's/|/ /g'| awk '{print $2}'); 
    stored_value=$(echo $line | sed -e 's/|/ /g'| awk '{print $3}'); 
    hex_key=$(echo $key | base64 -d | xxd -p); 
    if [[ $hash_type = 1 ]]; then  
    gen_value=$(echo -n $ip_or_alias | openssl sha1 -mac HMAC \ 
     -macopt hexkey:$hex_key | cut -c 10-49 | xxd -r -p | base64);  
    if [[ $gen_value = $stored_value ]]; then 
     echo $gen_value; 
     echo "Found match in known_hosts file : entry#"$entry" !!!!" 
    fi 
    else 
    echo "unknown hash_type" 
    fi 
    entry=$((entry + 1)); 
done 
3

Schritt 1: $ Bhargava.ssh #

ssh-keygen -R 199.95.30.220

Schritt 2: $ Bhargava.ssh #

ssh-copy-id [email protected]

  Enter the the password......... 

step3: Bhargava.ssh #

ssh [email protected]

Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-68-generic x86_64) * Documentation: https://help.ubuntu.com/ Ubuntu 14.04.3 LTS server : 228839 ip : 199.95.30.220 hostname : qt.example.com System information as of Thu Mar 24 02:13:43 EDT 2016 System load: 0.67 Processes: 321 Usage of /home: 5.1% of 497.80GB Users logged in: 0 Memory usage: 53% IP address for eth0: 199.95.30.220 Swap usage: 16% IP address for docker0: 172.17.0.1 Graph this data and manage this system at: https://landscape.canonical.com/ Last login: Wed Mar 23 02:07:29 2016 from 103.200.41.50 

hostname @ qt: ~ $

+0

Danke! Aber ist das anders als die bestehende [Antwort oben] (http://stackoverflow.com/a/8506473/199217)? –

0

Sein bedeutet Remote-Host-Schlüssel geändert wurde (Mai Host-Passwort zu ändern sein),

Ihr Terminal vorgeschlagen, diesen Befehl auszuführen als root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231 

Sie müssen diesen Hostnamen aus der Hosts-Liste auf Ihrem PC/Server entfernen. Kopieren Sie den vorgeschlagenen Befehl und führen Sie ihn als Root-Benutzer aus.

$ sudo su               // Login as a root user 

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231 // Terminal suggested command execute here 
Host [www.website.net]:4231 found: line 16 type ECDSA 
/root/.ssh/known_hosts updated. 
Original contents retained as /root/.ssh/known_hosts.old 

$ exit                // Exist from root user 

$ sudo ssh [email protected] -p 4231        // Try again 

Ich hoffe, das funktioniert.

Verwandte Themen