題 從known_hosts中刪除密鑰


我在過去幾週內構建了幾個虛擬機。問題是, .ssh/known_hosts 給了我 男人在中間 警告。發生這種情況是因為另一個指紋與虛擬機IP相關聯。

在裡面 .ssh/known_hosts 但是,我沒有找到與IP相關的記錄,只有兩個奇怪的,類似鍵的字符串和“ssh-rsa”。

有沒有人有任何關於如何刪除舊密鑰的想法 known_hosts


111
2017-08-26 16:00


起源


你所指的“奇怪的,類似鍵的字符串”是散列的主機/ IP地址。這是一項安全功能,可幫助阻止入侵者了解您有權訪問哪些系統。如果你看到這個,那麼你的ssh_config有 HashKnownHosts yes 組。 - Deebster
如果您覺得文件內容太混亂,您可能已激活換行。停用它。所有行都以主機名或IP地址開頭。 - Daniel B


答案:


sed -i '6d' ~/.ssh/known_hosts

將修改文件〜/ .ssh / known_hosts:6,刪除第6行。

在我看來,使用 ssh-keygen -R 對於openssh高級用戶來說,這是一個更好的解決方案,而普通的Linux管理員可以通過使用上述方法更好地保持他/她的sed技能。


78
2017-07-02 17:56



如果您有正式的應用程序,我認為手動編輯配置文件不是一個好建議。冒險不會讓你成為專業人士,找到最快最安全的選擇。這就像告訴人們繼續編輯 /etc/sudoers無 visudo。如果你想磨礪你的 sed 技能,繼續這樣做而不會弄亂你的系統。 - kraxor
“如果你有正式申請”=>兩者 ssh-keygen -R 和 sed -i {line}d 非常“官方”,兩者都將在可預見的未來發揮作用。 Util ssh-keygen允許通過行號刪除,兩者都是完全可以接受的(因為,與處理現代數據中心主機名相比,行號通常更容易處理,並且更不容易出錯)。 - michael
A)具體刪除第6行,都是“看起來沒有手”。關於文件的第6行有什麼重要意義,根本沒有解釋?! B)還 man ssh-keygen 提到 ssh-keygen -R hostname  你剛剛說過 ssh-keygen -R 沒有指定主機名,你沒有解釋你的意思。 - barlop


最簡單的解決方案是:

rm -f .ssh/known_hosts

ssh會再次重新創建該文件,但是您丟失了對其他主機的密鑰檢查!

或者,您可以使用:

ssh-keygen -R "hostname"

或者ssh“man-in-the-middle”消息應指示known_hosts文件的哪一行具有違規指紋。編輯文件,跳轉到該行並刪除它。


93
2017-08-26 16:11



ssh-keygen -R hostname 也會工作。 - grawity
如果我們刪除該文件,其他鍵也將刪除。 - shgnInc
刪除文件是一個不好的建議,這就像告訴別人購買新PC,因為舊的PC有一個壞的鼠標。手動編輯可由官方應用程序編輯的文件也是一個壞主意。該 ssh-keygen 由於評論而添加了選項,但沒有解釋。我認為這個答案不值得這麼多贊成。 - kraxor
-1因為整個“刪除整個known_hosts文件”的第一行。這是一個可怕的,可怕的,可怕的建議,應該被刪除。 - Olivier Dulac
這個解決方案太過分了。只需刪除有問題的行。而已。 - Blake Frederick


這有一個ssh-keygen開關(-R)。

男人ssh-keygen讀:

-R主機名                從known_hosts文件中刪除屬於hostname的所有密鑰。這個                選項對於刪除散列主機非常有用(請參閱上面的-H選項)。


58
2018-02-22 18:41



這是最簡單,最安全的方法。 - Leo
注意:這會將known_hosts文件的權限更改為0600.如果您因任何原因擁有共享的known_hosts文件,則可能會禁用它的共享。 - Jiri Klouda
和正確的。而且,我必須這樣做 [localhost]:port,使用括號,因為我使用自定義端口我猜= /。像其他人所說的那樣,我也會使用無SSH密鑰檢查方法進行瞬態/測試系統開發。 - Pysis


警告將告訴您已知主機文件中的確切行。

這是一個例子:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       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 部分?它指定文件和行號。


16
2017-08-26 16:17





您還可以指示ssh不使用UserKnownHostsFile和StrictHostKeyChecking標誌檢查known_hosts文件。

例如:

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

為了便於使用,您可以使用以下別名:

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

現在,只要您確定信任服務器的證書,就可以大膽。


9
2018-03-12 16:05



多麼可怕的想法。永久禁用一層安全性只是因為你懶得保持你的安全 ~/.ssh/known_hosts 最新?為什麼不繼續使用 telnet? “只要你確定” - 如果你確定,那麼你不知道MITM的攻擊是什麼,你應該花一些時間閱讀一些好的文獻。 - kraxor
根據OP的問題,我認為這是一個有效的答案。有時你有一個測試系統,你正在創建/銷毀很多虛擬機。 (我現在正在為RHCE考試做準備。)可能沒有任何安全隱患。雖然注意到安全隱患很大,但我認為這不應該被稱為“可怕的想法”。 - Rick Chatham
有關: superuser.com/a/1126243/73961 - michael


您需要運行以下命令來解決此問題。打開終端並鍵入以下命令:

對於下面的所有示例,只需替換-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

4
2018-05-28 09:28



在先前的答案中已經提出了這種方法。您能否根據答案中的不同之處進行擴展? - Burgi
@Burgi - 這個答案提供了有關語法的更多細節 ssh-keygen -R 到目前為止,還沒有任何其他答案。它通過示例準確地顯示了您可以寫的內容 -R。所以這個答案是值得的,即使它不是一個全新的答案。 - Yitz
@Yitz我的評論是作為評論的一部分。當時(18個月前)我認為這個問題需要一些幫助才能讓它變得更好。 - Burgi


您還可以從已知主機中刪除一行,例如 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


2
2018-06-22 16:32



在任何給定的文本編輯器中執行此操作有什麼好處?有沒有理由不這樣做,比如如何用visudo編輯sudoers? - Andy Lester
這是什麼發行版? Ubuntu似乎沒有它。 - flickerfly
好處是它是自動化的,快速的/它是你自己添加的單獨二進製文件 - grosser
您可以在此處發布您的腳本,而不是鏈接您在發布此答案的那天創建的自己的博客條目。這符合垃圾郵件恕我直言。更不用說你可以創建一個簡單的別名來實現相同的結果,不需要7行長的ruby腳本。 - kraxor


主機名或ip的條目應位於第一列。警告還應列出違規鑰匙所在的行號。


0
2017-08-26 16:13





這是一個文本文件。您可以使用vi(m)輕鬆編輯,只需刪除有問題的行(dd),然後保存文件(wq)。但是如果有一個特定的命令來刪除主機,那可能是最安全的方法。


0
2018-06-27 13:23



我不知道如何直接在VIM中編輯文件是“不安全的”。它基於您對VIM的舒適程度。特別是使用此文件時,您遇到的最大風險是刪除過多的密鑰,在這種情況下,您將再次收到提示。 - Rick Chatham
我所指的“安全”涉及1)忘記/不知道刪除其他文件中的相關信息(如果有的話)和2)意外刪除多於或少於需要,從而破壞文件。 - Ryan Griggs