简短的问题
我假设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
找不到密钥不是问题。