iga*_*gal 5 ssh openssh ssh-keygen
我假设ssh-keygen -r hostname
使用默认公钥。我本以为它会默认为~/.ssh/id_rsa.pub
,但事实似乎并非如此。那么它在做什么呢?
我使用 OpenSSH 命令行实用程序的经验是,它们要么提示用户输入任何缺少的参数,要么回退到标准默认值。但ssh-keygen -r
事实似乎并非如此。当我运行ssh-keygen -r
命令而不指定公钥(例如ssh-keygen -r hostname
)时,我得到以下输出:
no keys found.
Run Code Online (Sandbox Code Playgroud)
我希望它默认为我的公钥,例如~/.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
Run Code Online (Sandbox Code Playgroud)
此外,手册页ssh-keygen
显示了该命令的以下语法ssh-keygen -r
:
ssh-keygen -r hostname [-f input_keyfile] [-g]
Run Code Online (Sandbox Code Playgroud)
由于该-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
会寻找您机器的主机密钥。它对用户密钥 \xe2\x80\x94\xc2\xa0 不感兴趣,如果您强制它读取用户密钥,它可能会起作用,但结果没有用。ssh-keygen -r
查看/etc/ssh_host_*_key.pub
,或 SSH 服务器已配置为查找主机密钥的任何位置。如果您的计算机上没有设置 SSH 服务器,则 SSHFP 记录没有用处,因此找不到ssh-keygen -r
密钥并不是问题。