如果未指定公钥,`ssh-keygen -r`会做什么?

如果未指定公钥,`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。

答案1

ssh-keygen -r生成一个SSHFP记录。这是你放在DNS条目说 表明主持人key 对应主机名。这使得想要登录您计算机的人知道需要什么主机密钥,假设他们信任 DNS 记录(这实际上意味着必须使用DNSSEC)。

因此自然ssh-keygen -r会寻找您机器的主机密钥。它对用户密钥不感兴趣——如果你强迫它读取用户密钥,它可能会起作用,但结果没有用。ssh-keygen -r查看/etc/ssh_host_*_key.pub,或 SSH 服务器已配置为查找主机密钥的任何位置。如果你的机器上没有设置SSH服务器,那么SSHFP记录就没有用处,所以ssh-keygen -r找不到密钥并不是问题。

相关内容