題 如何修復有關ECDSA主機密鑰的警告


我正在嘗試在Ubuntu服務器上設置無密碼SSH ssh-copy-id myuser@myserver,但我收到錯誤:

警告:'myserver'的ECDSA主機密鑰與IP地址'192.168.1.123'的密鑰不同

造成這種情況的原因是什麼,我該如何解決?我試著刪除了 .ssh 遠程機器上的目錄,並運行 ssh-keygen -R "myserver" 本地,但這不能解決錯誤。


218
2018-05-05 19:05


起源


在我的情況下,我改變服務器(IP)綁定與域,然後 The ECDSA host key for server has changed。我的方法是刪除有關域的相關緩存字符串 ~/.ssh/known_hosts。然後ssh工作。 - Ninja


答案:


刪除緩存的密鑰 192.168.1.123 在本地機器上:

ssh-keygen -R 192.168.1.123

318
2018-05-05 20:20



當從家裡進行SSH連接時,在新安裝的Debian服務器上沒有為我工作。此外,答案非常簡潔。 - Chris K
/home/wf/.ssh/known_hosts已更新。原始內容保留為/home/wf/.ssh/known_hosts.old“警告:永久性地將IP地址'x.x.x.x'的ECDSA主機密鑰添加到已知主機列表中。”被展示。然後它似乎工作 - Wolfgang Fahl
您可以更新密鑰而不是刪除密鑰。使用 ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hosts 之後,您不需要在首次連接到主機時驗證新密鑰。 - Alex
對於誰沒有成功使其工作:我已經註冊多次出現相同的IP:1 /所述IP地址(xx.xx.xx.xx),域(tomsihap.fr),提供商給定的vps服務器地址(vpsxxx.ovh.net)。每個人的ssh-keygen -R都做了工作。 - tomsihap
為我工作,但混淆可能來自哪個主機應運行此命令?答案來自出現錯誤的那個。第二個問題和答案更明顯,但以防萬一:哪個地址傳遞給ssh-keygen -R?錯誤陳述中的地址。 - Russ Bateman


在我的情況下 ssh-keygen -R ... 沒有修好警告。我有這樣的額外信息:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

我只是手動編輯 ~/.ssh/known_hosts 並刪除第8行(“違規密鑰”)。我嘗試重新連接,主機被永久添加,之後一切都很好!


42
2018-03-11 18:52



奇蹟般有效。可以用一行來解決這個問題 sed -e '8d' /home/myuser/.ssh/known_hosts,替換行號 8 以及系統上顯示的文件名。 - Alex P. Miller


我在局域網計算機和我的兩個虛擬主機帳戶之間進行了大量的搜索,所以我用SSH解決了各種各樣的可能性,包括使用身份驗證問題 ssh -v 看看哪裡出了什麼問題。

剛剛解決了這個問題並且對答案不滿意,我想知道“為什麼”我自己...

我的情況的觸發器是:在工作中安裝新的服務器操作系統,在安裝openssh-server軟件包時,在工作服務器上生成了一組新的主機密鑰。以前,我的所有服務器操作系統都是Ubuntu,這次它改為Debian(我懷疑在權限方面存在細微差別)。

當所有操作系統都是Ubuntu並且我重新安裝服務器的操作系統時,在第一次使用SSH時,我會收到這種警告,我更喜歡上面的靜音警告!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

然後我打開了 的〜/ .ssh / known_hosts中 在啟動ssh的計算機上,刪除該行,重新連接並發生這種情況:

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

關於:11122是我在防火牆上路由SSH的端口號

我檢查了以前的Ubuntu服務器的備份,並對我的新Debian安裝進行了區分:

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

所以是的,很可能,主機最近開始使用ecdsa密鑰,最近根據Ubuntu的變化,我會責怪更新。 Ubuntu從我依靠堅如磐石的Linux操作系統轉移到了我這次安裝Debian的原因。

我讀了一個 ec.Sa q / a關於ecdsa 並已從中刪除該行 sshd_config 我的新Debian服務器。 (跑了 service ssh restart


14
2018-01-16 08:12



對於漂亮的並排比較塊,+1。您是否可以添加一個URL,其中包含“Ubuntu從堅如磐石的Linux操作系統轉移”的意思? - bgoodr
@bgoodr這是我的觀點,僅僅是基於過去幾年多次設置我自己的RAID文件服務器。 :/廢話答案,但開始谷歌搜索 ubuntu debian server 你會明白我的意思。 - Chris K
@ChrisK你,先生,是老闆。感謝您詳細而簡潔的答案。 - sargas


ssh-keygen -f“/root/.ssh/known_hosts”-R 192.168.1.123

這應該替換known_hosts.old下的現有密鑰並創建一個新密鑰。 這個解決方案在同一場景中對我有用


5
2018-05-14 18:16





每次都會出現提示,因為使用動態尋址時IP地址會一直變化。嘗試使用靜態IP,因此您只需添加一次密鑰。


4
2018-01-16 09:06



好點,我錯過了有人提到動態ips的地方嗎? - Chris K


您使用相同的用戶進行連接嗎?

如果您登錄到類似用戶的本地PC 約翰 並連接到服務器  喜歡用戶 阿道夫·@乙 一切都還可以,如果您像用戶一樣登錄到本地PC,並不意味著一切正常  並連接到服務器  喜歡用戶 阿道夫·@乙

如果要以PC用戶Beda身份登錄服務器B. 一個 沒有密碼,請嘗試此命令,全部來自PC 一個

ssh-keygen -t rsa

此命令生成密鑰並將密鑰存儲在文件中。請離開 密碼 空。

ssh Beda@B mkdir -p .ssh

如果目錄尚不存在,則此命令將創建該目錄。否則,請勿打印錯誤消息。

cd ~/.ssh

此命令將目錄更改為用戶主目錄./ssh。

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

此命令打印文件 id_rsa.pub (你的公鑰)進去 authorized_keys中 在服務器上。

重要提示:Beda是您要連接的服務器上的用戶名,B是您的服務器IP。

現在,您可以在沒有密碼或密碼的情況下連接到服務器B:

ssh Beda@B

2
2017-10-21 09:17



或者只使用ssh-copy-id使用id_rsa.pub密鑰填充authorized_keys文件,而不會產生額外的麻煩。 - BlakBat


線程 這裡 可能有幫助。

基本上,您要刪除該主機的RSA和ECDSA密鑰,然後使用 ssh-keyscan 把它們放回你的 known_hosts 以不會導致此衝突的方式提交文件。當我遇到同樣的問題時,它對我有用。


1
2017-12-20 16:47





問題:導致這種情況的原因是什麼,......?

所以ssh服務器主機密鑰發生了變化。 是什麼引起了變化? 這很難說。 以下是一些猜測:

  • 我的服務器上的sshd是否開始使用ECDSA密鑰,因此它是一種新的密鑰類型?
  • 我的服務器最近重新安裝了嗎?
  • 我的服務器上的sshd最近重新安裝了,所以生成了一個新的ssh主機密鑰?
  • 有人重新生成或替換sshd主機密鑰嗎?
  • myserver的IP地址是否已更改,以便其他主機正在應答該IP地址?

問題:......我該如何解決?

正如其他人已經回答的那樣,刪除您的帳戶已緩存的myserver的緩存ECDSA主機密鑰。


1
2017-08-07 15:42



很好的建議,但實際上並沒有回答這個問題。甚至沒有嘗試回答這個問題。 - boatcoder


這個錯誤讓我很長時間都很煩。出於某種原因,無論我是否願意,都會有所不同

ssh host

要么

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

然後我指出了更改配置文件的選項。看我的腳本 https://askubuntu.com/a/949731/129227 有自動化過程。


1
2017-08-25 12:43



使用配置值 CanonicalizeHostname 和 CanonicalDomains 將避免刪除嚴格的檢查,並使ssh認為host和host.domain是相同的。 - BlakBat


我通過卸載並重新安裝Secure Shell將其固定在Chromebook上......它就像一個魅力。


0
2018-05-18 23:26



這太過分了。在我的答案中查看更簡單的解決方案。 - Alex Yursha


以下是如何刪除已知的主機指紋(來自 known_hosts 文件)在Chrome操作系統上:

連接失敗時,在ssh輸出中查找違規主機條目的索引。例如,下面的違規索引是 7

Offending ECDSA key in /.ssh/known_hosts:7

打開JavaScript控制台(CTRL+轉移+Ĵ)安裝Shell窗口並鍵入以下內容,替換 INDEX 具有適當的值(例如 7):

term_.command.removeKnownHostByIndex(INDEX);

這個解決方案來自於 Leo Gaggl的博客


0
2017-07-24 07:55