如何在“主机密钥validation失败”时build立ssh密钥对
我已经在桌面和两台服务器之间以及从服务器到桌面之间build立了ssh密钥对,但是在我的桌面上重新安装操作系统之后,我无法通过以下方式重新build立进入桌面的密钥对:
mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t ssh-copy-id username@server
我得到以下错误:
( 斜体名称改为保护无辜我的桌面是Ubuntu的,我在这里找不到答案)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @警告:远程主机标识已更改! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT可能有人正在做一些事情! 现在有人可能会窃听你(中间人攻击)! 也可能是RSA主机密钥刚刚更改。 远程主机发送的RSA密钥的指纹是ab:cd:ef:gh请联系您的系统pipe理员。 在/ home / user /.ssh/known_hosts中添加正确的主机密钥以摆脱此消息。 / home / user /.ssh/known_hosts:1中的冲突密钥用于user.server的 RSA主机密钥已更改,并且请求严格检查。 主机密钥validation失败。
ssh-keygen -R hostname
这将从known_hosts
删除有问题的密钥
手册页条目如下:
-R hostname
从known_hosts文件中删除属于-R hostname
所有密钥。 此选项对于删除散列主机非常有用(请参阅上面的-H选项)。
远程主机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
如果你确定服务器是正确的, sed -i 1d ~/.ssh/known_hosts
会删除本地~/.ssh/known_hosts
第1行。 新的正确密钥将在下次连接时添加到文件中。
步骤1:$ Bhargava.ssh#
ssh-keygen -R 199.95.30.220
第二步:$ Bhargava.ssh#
ssh-copy-id hostname@199.95.30.220
Enter the the password.........
step3:Bhargava .ssh#
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
主机名@ QT:〜$
rm -f /home/user/.ssh/known_hosts
或打开它并删除违规ip /主机名的条目
(PS它在你发布的错误消息中正确地告诉你这个)
当你在串行控制台上工作时,有时候也会出现这种情况,然后在详细模式下检查上面的命令-v
将显示你/ dev / tty不存在,而它却是。
在上面的情况下,只需删除/ dev / tty,然后创build/ dev / ttyS0到/ dev / tty的符号链接。
这意味着您的远程主机密钥已更改(可能是主机密码更改),
您的terminalbuild议以root用户身份执行此命令
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231
您必须从您的PC /服务器上的主机列表中删除该主机名称。 复制该build议的命令并以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
我希望这个工程。