我读了这个问题
在答案和解决方案中出现以下命令(出于演示目的在此处进行了调整)
ssh-keyscan 192.168.1.X | ssh-keygen -lf -
我知道隔离的第一个命令显示了public keys
主机的。当执行完整的命令时(即两个部分),根据最终输出,第一个命令的公钥用于生成指纹他们自己。
问题
- 在命令中如何
-
工作ssh-keygen -lf -
?
这是强制性的。我知道l
是为了展示指纹并f
定义文件名,但如何解释-
?
答案1
默认情况下,ssh-keygen -l
将以交互方式询问您要显示指纹的公钥文件。您可以-f
给它一些现有文件的路径名。
如果路径名是-
(破折号),则从标准输入而不是从文件读取输入。
这是一种常见的做法,许多其他命令也遵循这种做法,最值得注意的是cat
(cat -
从标准输入读取)。
在您的管道中,标准输入上的数据由命令提供ssh-keyscan
。该ssh-keyscan
命令将提取上述主机的公钥并将其传递给ssh-keygen -l
.该ssh-keygen
实用程序将输出指纹。
没有 -f -
,该ssh-keygen
实用程序将尝试使用 的输出ssh-keyscan
作为文件名来读取密钥。
这可以说是糟糕的设计,因为很容易以编程方式确定程序的输入是来自终端还是来自终端之外的东西(如另一个命令或文件)。所以从某种意义上来说,-f -
可以变得不必要。