2012-04-08 94 views

回答

76

等一下,我找到了。運行命令:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub 
+3

請注意,這將計算您的服務器操作系統的首選格式中的指紋散列值。根據您的本地操作系統,您可能需要使用舊的散列格式: ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub 這是在從ubuntu 12.04連接到Ubuntu 16.04時需要的例子 – Jeff 2016-11-10 13:40:25

11

隨着近來SSH(OpenSSH_6.0p1,OpenSSL的2012 1.0.0j 5月10日),我的腳本是這樣的:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa 
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...= 

注:

  • 如果您的sshd在自定義端口上運行,請在ssh-keyscan命令中添加'-p portNumber')
  • ssh-keyscan寫在stderr上,不stdout(!),因此bash重定向「2>&1」(即可以取決於你的shell)

這是我加入到我的~/.ssh/known_hosts文件,以便授權從本地主機的ssh請求我的測試線(主要用於gitolite, which uses ssh)。


Daniel Böhmer證實in the comments

  • ssh-keyscan提供SSH服務器的完整公共密鑰(S)
  • ssh-keygen輸出幾乎是相同的公共密鑰文件的格式。
    只需刪除第一列(IP地址或主機名)並保存或管它到呈現指紋的ssh-keygen -l
+1

問題是關於密鑰的*指紋*。 ssh-keyscan只提供(公共)密鑰。 – aleb 2015-09-24 09:48:59

+0

確實,'ssh-keyscan'提供了SSH服務器的完整公鑰。我有它的輸出轉儲,現在想在第一次連接期間將它與'ssh'顯示的指紋進行比較。怎麼做? – 2015-11-05 13:39:01

+0

我剛剛發現:'ssh-keygen'的輸出與公鑰文件的格式幾乎相同。只需刪除第一列(IP地址或主機名)並保存即可,或者將其傳送到顯示指紋的'ssh-keygen -l'。我仍然想知道如何讓ssh在請求確認時顯示服務器的完整公鑰。 – 2015-11-05 13:51:00

5

在我的系統需要指定一個MD5鍵而不是默認的SHA256:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub 

該輸出匹配我在客戶端上看到的錯誤格式的字符串。

+1

'-E'標誌在OpenSSH> 6.6中引入,大約在默認情況下切換到SHA256指紋的時候。因此,在客戶端顯示SHA256指紋的情況下,它不能用於在服務器上輸出該格式。解決方法:https://superuser.com/a/1030779 – tanius 2017-06-08 22:06:31