我正在尝试调用 ssh-keygen
通过 bash
使用变量作为输入而不是文件来获取公钥的指纹。我知道我可以使用临时文件来解决此问题,但出于超出此问题范围的原因,我不想这样做。
此方法不有效,因为它说 key 文件无效(肯定是正确的)
echo $pubkey | ssh-keygen -lf /dev/stdin
这确实有效,但不是使用变量,而是使用文件。
ssh-keygen -lf alpha.pub
这确实有效,但不是使用变量,而是使用重定向文件。
ssh-keygen -lf /dev/stdin < alpha.pub
这不有效,因为我得到了不明确的重定向
ssh-keygen -lf /dev/stdin < $(echo $pubkey)
对于如何让 ssh-keygen 使用公钥从变量中读取信息,我将不胜感激,如果可能的话,我会解释为什么重定向没有按照我认为它们应该做的方式进行。具体为什么|
行为不同于 <
为什么第三个例子是 ambiguous redirect
.我在网上搜索,但许多重定向教程似乎都没有回答我的问题。
最佳答案
echo $pubkey | ssh-keygen -lf /dev/stdin
/dev/stdin is not a public key file.
/dev/stdin 实际上是一个 unix 管道,不是普通文件,所以 ssh-keygen 无法打开文件
ssh-keygen -lf /dev/stdin <<<$key
1024 92:6a:3f:5c:1f:78:.....
/dev/stdin 指的是一个常规文件,使用 bash heredoc 创建。您可以验证这一点:
# ls -l /dev/stdin <<<$pubkey
lrwxrwxrwx 1 root root 15 Feb 11 08:07 /dev/stdin -> /proc/self/fd/0
# ls -l /proc/self/fd/0 <<<$pubkey
lr-x------ 1 juergen juergen 64 Apr 14 13:31 /proc/self/fd/0 -> /tmp/sh-thd-1271250023 (deleted)
关于linux - ssh-keygen 接受标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2635360/