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

时间:2010-11-12 04:11:41

标签: ubuntu ssh foreign-keys

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

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t 
ssh-copy-id username@server

我收到以下错误:

斜体中的名称已更改以保护无辜的我的桌面是Ubuntu,我找不到答案 here

  

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@       @警告:远程主机识别已更改! @       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@       有可能是某人做的很棒!       有人可能正在偷听你(中间人)   攻击)!       RSA主机密钥也可能刚刚更改。       远程主机发送的RSA密钥的指纹是        AB:CD:EF:GH       请联系您的系统管理员。       在/home/user/.ssh/known_hosts中添加正确的主机密钥   摆脱这个消息。       在/home/user/.ssh/known_hosts:1中攻击密钥        user.server 的RSA主机密钥已更改,您已请求严格   检查。       主机密钥验证失败。

11 个答案:

答案 0 :(得分:108)

ssh-keygen -R hostname

这会从known_hosts

中删除违规密钥

手册页条目显示:

  

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

答案 1 :(得分:10)

最有可能的是,远程主机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

答案 2 :(得分:5)

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

答案 3 :(得分:5)

Step1:$ Bhargava.ssh#

  

ssh-keygen -R 199.95.30.220

第二步:$ Bhargava.ssh#

  

ssh-copy-id hostname@199.95.30.220

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

第3步:Bhargava .ssh#

  

ssh hostname@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

hostname @ qt:〜$

答案 4 :(得分:2)

有时也会出现在串行控制台上工作的情况,然后在详细模式下检查上面的命令-v会显示/ dev / tty不存在,而它确实存在。

在上面的例子中,只需删除/ dev / tty并在/ dev / tty中创建/ dev / ttyS0的符号链接。

答案 5 :(得分:1)

当主机密钥过期或更改时,会出现此问题。您可以删除主机正在使用的密钥,然后尝试再次使用ssh,以便添加客户端和服务器都知道的新密钥。

您可以使用cat /.ssh/known_hosts检查与主机关联的密钥。现在,您可以手动或使用ssh-keygen选项删除主机密钥。您可以执行以下任一操作。

  1. 手动取下钥匙

    vim /.ssh/known_hosts

删除与主机关联的密钥。

  1. 使用ssh-keygen删除密钥

    ssh-keygen -R your_host_or_host_ip

这将删除与主机关联的密钥。

现在,您可以像往常一样ssh到主机,然后将询问您是否要继续使用此主机。输入“是”后,此主机将使用更新的密钥添加到您的/.ssh/known_hosts中。现在,您应该成为您的主机。

答案 6 :(得分:0)

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

或打开它并删除有问题的ip / hostname

的条目

(P.S。它在您发布的错误消息中告诉您这一点)

答案 7 :(得分:0)

表示您的远程主机密钥已更改(可能是主机密码更改),

您的终端建议以root用户身份执行此命令

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

您必须从PC /服务器上的主机列表中删除该主机名。复制建议的命令并以root用户身份执行。

$ 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 root@www.website.net -p 4231                              // Try again

我希望这有效。

答案 8 :(得分:0)

首先,您应该删除现有密钥。大多数基于Linux的操作系统中的SSH密钥都将保存为“/root/.ssh/known_hosts”,因此为了删除与主机相关的密钥,将使用以下命令:

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

此致 K1

答案 9 :(得分:0)

当您尝试将远程服务器与ssh连接时:

$ ssh username@ip_address

然后提出错误,加以解决:

$ ssh-keygen -f "/home/local_username/.ssh/known_hosts" -R "ip_address"

答案 10 :(得分:-1)

任务suer的无密码身份验证。

错误:主机密钥验证失败。

来源:10.13.1.11 目标:10.13.1.35

临时解决方法:

[user @ server〜] $ ssh user@10.13.1.35 无法建立主机“ 10.13.1.35(10.13.1.35)”的真实性。 RSA密钥指纹为b8:ba:30:46:a9:ab:70:12:1a:f2:f1:61:69:73:0a:19。 您确定要继续连接(是/否)吗?是 警告:将“ 10.13.1.35”(RSA)永久添加到已知主机列表中。

尝试再次验证用户身份...它将起作用。