我想要我的 SSH 密钥文件的指纹,它是一个私钥(PEM 文件)。
key=$(ssh-keygen -yf lony.pem) | echo $key | ssh-keygen -lf /dev/stdin <<<"$key"
Run Code Online (Sandbox Code Playgroud)
导致这个错误:
/dev/stdin 不是公钥文件。
密钥文件如下所示:
-----开始RSA私钥-----
..
-----结束RSA私钥-----
我怎样才能得到指纹?
这个命令管道有几个问题:
key=$(ssh-keygen -yf lony.pem) | echo $key |
ssh-keygen -lf /dev/stdin <<<"$key"
Run Code Online (Sandbox Code Playgroud)
首先,不清楚为什么要尝试将 ( |) 赋值语句的 stdout 传递给该echo语句。第一个不产生任何输出,第二个不消耗任何输入。在第三个组件中,您将echo命令中的标准输出通过管道传输到 ...的标准输入ssh-keygen,您还使用<<<运算符重定向标准输入。
从私钥文件中获取指纹的最简单方法就是运行:
ssh-keygen -lf /path/to/privatekey.pem
Run Code Online (Sandbox Code Playgroud)
例如,如果我们生成一个私钥:
bash-4.3$ ssh-keygen -f testkey -N ''
Run Code Online (Sandbox Code Playgroud)
然后我们可以比较这个输出:
bash-4.3$ ssh-keygen -lf testkey
2048 SHA256:beF471z86giH7cV49TduNVFD949UXzT+jHxgu+99gmM lars@myhost (RSA)
Run Code Online (Sandbox Code Playgroud)
对此:
bash-4.3$ ssh-keygen -yf testkey | ssh-keygen -lf /dev/stdin
2048 SHA256:beF471z86giH7cV49TduNVFD949UXzT+jHxgu+99gmM no comment (RSA)
Run Code Online (Sandbox Code Playgroud)
并看到我们从两个命令中获得了相同的指纹。