"主机密钥验证失败"时如何建立ssh密钥对

Dav*_*uer 50 ssh ubuntu foreign-keys

我在桌面和两台服务器之间以及从服务器到桌面之间设置了ssh密钥对,但在桌面上重新安装操作系统之后,我无法通过以下方式重新建立进入我桌面的密钥对:

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t 
ssh-copy-id username@server
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

(斜体名称改为保护无辜我的桌面是Ubuntu,我在这里找不到答案)

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @警告:远程主机识别已更改!@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 有人可能正在偷听你(中间人攻击)!RSA主机密钥也可能刚刚更改.远程主机发送的RSA密钥的指纹为 ab:cd:ef:gh 请联系您的系统管理员.在/ home/user /.ssh/known_hosts中添加正确的主机密钥以删除此消息./ home/user /.ssh/known_hosts:1中的攻击密钥用于user.server的 RSA主机密钥已经改变,你要求严格检查.主机密钥验证失败.

Rob*_*bAu 113

ssh-keygen -R hostname
Run Code Online (Sandbox Code Playgroud)

这会从中删除违规密钥 known_hosts

手册页条目如下:

-R hostname从known_hosts文件中删除属于hostname的所有密钥.此选项对于删除散列主机很有用(请参阅上面的-H选项).

  • +1"主机密钥验证失败"表示远程主机的主机密钥已更改.Ssh将远程主机的主机密钥存储在〜/ .ssh/known_hosts中.您可以手动编辑该文本文件并删除旧密钥(您可以在错误消息中看到行号),或使用ssh-keygen -R hostname (3认同)

小智 13

最有可能的是,远程主机ip或ip_alias不在〜/ .ssh/known_hosts文件中.您可以使用以下命令将主机名添加到known_hosts文件.

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

另外,我生成了以下脚本来检查特定的ip或ipalias是否在know_hosts文件中.

#!/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
Run Code Online (Sandbox Code Playgroud)


Bat*_*ava 6

步骤1:$ Bhargava.ssh#

ssh-keygen -R 199.95.30.220

步骤2:$ Bhargava.ssh#

ssh-copy-id主机名@ 199.95.30.220

          Enter the the password.........
Run Code Online (Sandbox Code Playgroud)

第三步:Bhargava .ssh#

ssh主机名@ 199.95.30.220

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
Run Code Online (Sandbox Code Playgroud)

主机名@qt:〜$


eph*_*ent 5

如果您确定服务器是正确的,sed -i 1d ~/.ssh/known_hosts将删除您本地的第1行~/.ssh/known_hosts.下次连接时,新的正确密钥将添加到文件中.

  • @David:你上面粘贴的输出显示"/home/user/.ssh/known_hosts:1中的攻击密钥".你知道行号已经是什么,不必运行`ssh-keygen -F`. (3认同)
  • 好的解决方案 但这不是假设有问题的服务器(在这种情况下我的桌面)是文件中的第一行吗?我发现"ssh-keygen -F hostname"告诉该行主机名键是打开的,所以如果n是行号,可能会有sed -i nd~/.ssh/know_hosts. (2认同)