如果沒有指定公鑰,ssh-keygen -r
會做什麼?
簡短的問題
我假設
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
找不到密鑰不是問題。