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