How to establish ssh key pair when “Host key verification failed”

后端 未结 11 1819
抹茶落季
抹茶落季 2021-01-30 10:17

I have set up ssh key pairs between my desktop and two servers, and from the servers to my desktop, but after reinstalling the OS on my desktop, I can\'t re-establish the key-pa

相关标签:
11条回答
  • 2021-01-30 10:46

    If you're sure the server is correct, sed -i 1d ~/.ssh/known_hosts will delete line 1 of your local ~/.ssh/known_hosts. The new correct key will be added to the file the next time you connect.

    0 讨论(0)
  • 2021-01-30 10:52

    This issue arises when the host key is expired or changed. you can remove the keys that host is using and try to ssh again, so that you are adding new key that is known to both client and server.

    You can check the keys associated with your hosts with cat /.ssh/known_hosts . Now, You can remove the hosts keys manually or using the ssh-keygen option. You can do either of the following option.

    1. Manual removal of keys

      vim /.ssh/known_hosts

    delete the key that is associated with your host.

    1. Remove key using ssh-keygen

      ssh-keygen -R your_host_or_host_ip

    This will remove your key associated with the host.

    Now, you can ssh to your host as usual and you will be asked if you want to continue to this host. Once your enter yes, this host will be added to your/.ssh/known_hosts with updated key. By now, you should be your host.

    0 讨论(0)
  • 2021-01-30 10:54
    ssh-keygen -R hostname
    

    This deletes the offending key from the known_hosts

    The man page entry reads:

    -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 讨论(0)
  • 2021-01-30 10:54
    rm -f /home/user/.ssh/known_hosts
    

    or open it up and delete the entry for the offending ip/hostname

    (P.S. It tells you exactly this in the error message you posted)

    0 讨论(0)
  • 2021-01-30 10:55

    Most likely, the remote host ip or ip_alias is not in the ~/.ssh/known_hosts file. You can use the following command to add the host name to known_hosts file.

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

    Also, I have generated the following script to check if the particular ip or ipalias is in the know_hosts file.

    #!/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
    
    0 讨论(0)
  • 2021-01-30 10:56

    First you should remove existing key. SSH keys in most of Linux-based OS will be saved this file "/root/.ssh/known_hosts", so in order to remove the key related to host the following command will be used:

    ssh-keygen -f "/root/.ssh/known_hosts" -R [Hostname]

    Regards K1

    0 讨论(0)
提交回复
热议问题