Answers:
sed -i '6d' ~/.ssh/known_hosts
将修改文件〜/ .ssh / known_hosts:6,删除第六行。
我认为,ssh-keygen -R
对于openshsh高级用户而言,使用是更好的解决方案,而您的常规Linux管理员最好使用上述方法来使他/她的sed技能保持最新。
/etc/sudoers
没有visudo
。如果您想提高自己的sed
技能,请继续做下去而不会使系统混乱。
ssh-keygen -R
和sed -i {line}d
相当“官方”,都将在可预见的未来。Util ssh-keygen允许按行号删除,两者都是完全可以接受的(因为与处理现代数据中心主机名相比,行号通常更易于处理,并且更不易出错)。
man ssh-keygen
提到ssh-keygen -R hostname
您刚才说ssh-keygen -R
的没有指定主机名,也没有解释您的意思。
最简单的解决方案是:
rm -f .ssh/known_hosts
ssh将再次重新创建文件,但是您将丢失对其他主机的密钥检查!
或者,您可以使用:
ssh-keygen -R "hostname"
或ssh“ man-in-the-middle”消息应指示known_hosts文件的哪一行具有令人讨厌的指纹。编辑文件,跳至该行并将其删除。
ssh-keygen -R hostname
也会工作。
ssh-keygen
添加该选项是因为有注释,但没有解释。我认为这个答案不应该得到如此多的批评。
-R
为此有一个ssh-keygen开关()。
man ssh-keygen
读取:
-R
主机名
hostname
从known_hosts
文件中删除所有属于的密钥。此选项对于删除散列主机很有用(请参阅-H
上面的选项)。
[localhost]:port
使用方括号,因为我使用的是我猜= /的自定义端口。就像其他人所说的那样,在过渡/测试系统开发中,我也会使用no SSH密钥检查方法。
该警告将告诉您已知主机文件中的确切行。
这是一个例子:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
零件了吗?它指定文件和行号。
您需要运行以下命令来解决此问题。打开终端并输入以下命令:
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
ssh-keygen -R
比到目前为止的任何其他答案提供了更多关于语法的细节。它通过示例确切地显示了您之后可以写的内容-R
。因此,即使这不是一个全新的答案,这个答案也是值得的。
您还可以使用UserKnownHostsFile和StrictHostKeyChecking标志指示ssh不要检查known_hosts文件。
例如:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com
为了易于使用,您可以对此进行别名:
alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
现在,只要您确定信任服务器的证书,就可以使用粗体显示。
~/.ssh/known_hosts
最新状态而永久禁用安全层?为什么不继续使用telnet
呢?“只要您有把握”-如果您有把握,那么您就不知道什么是MITM攻击,您可能应该花一些时间阅读一些好的文献。
所有答案都是好的,但是对于真正的SSH专业人士,我们缺少如何使用端口号删除ssh签名的信息。
简单的SSH主机签名删除命令:
ssh-keygen -R example.com
删除复杂的ssh密钥,例如,您通过非标准端口222连接到ssh:
ssh example.com -p 222
您将收到警告,并且要删除此警告,您需要使用方括号冒号端口号:
ssh-keygen -R [example.com]:222
希望这对非标准配置用户有所帮助。
您也可以使用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
。
sshdel() { sed -i "${@}d" ~/.ssh/known_hosts; }
然后使用进行调用sshdel [line number]
。没有红宝石,没有二进制,没有后顾之忧。
HashKnownHosts yes
设置。