2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

从 known_hosts

中删除密钥

答案 (11)

139
139
139
2009-08-26 16:11:22 +0000

最简单的解决办法是:

rm -f .ssh/known_hosts
``` ```
ssh-keygen -R "hostname"

ssh会重新创建文件,但是你失去了对其他主机的密钥检查!

或者,你可以使用:

&001

或者,ssh的 “man-in-the-middle "消息应该会显示已知的_hosts文件中的哪一行有违规的指纹。编辑文件,跳转到那一行并删除它。

91
91
91
2010-07-02 17:56:38 +0000
sed -i '6d' ~/.ssh/known_hosts

将修改文件 ~/.ssh/known_hosts:6 ,删除第6行。

89
89
89
2013-02-22 18:41:50 +0000

有一个ssh-keygen开关(-R)。

man ssh-keygen读作:

-R hostname

hostname文件中删除所有属于known_hosts的密钥。这个选项对删除散列主机很有用(参见上面的-H选项)。

18
18
18
2009-08-26 16:17:33 +0000

警告会告诉你已知的主机文件中的具体行数。

这里有一个例子:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

看到/home/user/.ssh/known_hosts:6部分了吗?它指定了文件和行号。

11
11
11
2016-05-28 09:28:08 +0000

你需要运行下面的命令来解决这个问题。打开终端,键入以下命令:

下面所有的例子,只需将 -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com
``` 后面的值替换掉即可
8
8
8
2014-03-12 16:05:22 +0000

你也可以使用UserKnownHostsFile和StrictHostKeyChecking标志来指示ssh不检查已知的hosts文件。

例如:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

为了方便使用,你可以别名为:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

现在你可以在确定你信任服务器的证书时,直接用粗体字来表示ssh。

4
4
4
2018-05-16 08:03:38 +0000

所有的答案都很好,但是对于真正的SSH pro来说,我们缺少的是如何删除带有端口号的ssh签名的信息,

–简单的ssh主机签名删除命令:

–复杂的ssh密钥删除,比如你在非标准端口222上连接ssh:

,会得到警告,要删除这个,需要用方括号冒号的端口号:

ssh-keygen -R [example.com]:222

希望对非标准配置的用户有帮助。

1
1
1
2019-10-09 16:59:56 +0000

这里有一个使用Ex编辑器的方法:

ex +6d -scwq ~/.ssh/known_hosts

,其中6号是你在警告信息中提到的行号。如:

在/home/user/中的IP的违规密钥。 ssh/known_hosts:6 <==== LINE NUMBER


一般来说, 建议使用 ex 非交互式地编辑文件, 而不是 sed, 因为它更像是一个S tream ED* itor 和它的 -i 参数是一个非标准的 FreeBSD 扩展名。

0
0
0
2010-06-22 16:32:09 +0000

你也可以用rmknownhost 111(111是要删除的行):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

保存为rmknownhost,在你的PATH中的文件夹中保存为&007。

0
0
0
2009-08-26 16:13:25 +0000

主机名称或IP的条目应放在第一列。警告还应该列出违规键所在的行号。

0
0
0
2014-06-27 13:23:54 +0000

它是一个文本文件。你可以很容易地用vi(m)编辑,只需删除相关行(dd),然后保存文件(wq)即可。但如果有专门的命令删除主机,这可能是最安全的方法。