Ssh

如果沒有指定公鑰,ssh-keygen -r 會做什麼?

  • October 14, 2018

簡短的問題

我假設ssh-keygen -r hostname使用預設公鑰。我原以為它會預設為~/.ssh/id_rsa.pub,但事實並非如此。那麼在做什麼呢?

長版

我對 OpenSSH 命令行實用程序的體驗是,它們要麼提示使用者輸入任何缺失的參數,要麼回退到標準預設值。但是,ssh-keygen -r這似乎並非如此。當我在ssh-keygen -r不指定公鑰(例如ssh-keygen -r hostname)的情況下執行命令時,我得到以下輸出:

no keys found.

我希望它預設為我的公鑰,例如~/.ssh/id_rsa.pub. 但是,情況似乎並非如此,因為當我明確傳遞此公鑰時(例如ssh-keygen -r hostname -f ~/.ssh/id_rsa.pub),我得到以下形式的輸出:

hostname IN SSHFP 1 1 5d6c87ef4e8f4f59974f05723ff3dc0cffc9c4b4
hostname IN SSHFP 1 2 8fa151e7f3ba43fa89c240ab236f0313aea1fe9f9e9f4e5b8f084ca0008399ed

此外,手冊頁顯示了該命令ssh-keygen的以下語法:ssh-keygen -r

ssh-keygen -r hostname [-f input_keyfile] [-g]

由於該-f input_keyfile標誌被表示為可選的,因此我希望ssh-keygen做的不僅僅是列印一條錯誤消息。

那麼,如果ssh-keygen -r hostname不使用~/.ssh/id_rsa.pub作為其預設公鑰,並且不提示使用者指定公鑰,那麼在做什麼呢?它是否預設為其他路徑?如果是這樣,那是什麼路徑?

**注意:**我在 macOS High Sierra(Mac OS X 版本 10.13.6)上執行 OpenSSH 版本 7.6。

ssh-keygen -r生成SSHFP 記錄。這就是您在DNS 條目中輸入的內容,表示與主機名對應的主機密鑰。假設他們信任 DNS 記錄(這實際上意味著必須使用DNSSEC獲取),這允許想要登錄到您的電腦的人知道期望的主機密鑰。

所以自然會ssh-keygen -r尋找你機器的主機密鑰。它對使用者密鑰不感興趣——如果你強制它讀取使用者密鑰,它可能會工作,但結果沒有用。ssh-keygen -r查看/etc/ssh_host_*_key.pub,或 SSH 伺服器已配置為查找主機密鑰的任何位置。如果您的機器上沒有設置 SSH 伺服器,那麼您就沒有必要使用 SSHFP 記錄,因此ssh-keygen -r找不到密鑰不是問題。

引用自:https://unix.stackexchange.com/questions/475448