ssh-keygen接受stdin

Rya*_*yan 20 linux variables bash ssh-keys

我试图ssh-keygen使用变量通过bash输入而不是文件来获取公钥的指纹.我知道我可以使用临时文件来解决这个问题,但由于这个问题的范围之外的原因,我不想这样做.

这个方法并没有因为它说,关键文件是无效的工作(这是正确的肯定)

echo $pubkey | ssh-keygen -lf /dev/stdin
Run Code Online (Sandbox Code Playgroud)

确实有效,但不使用变量,而是使用文件.

ssh-keygen -lf alpha.pub
Run Code Online (Sandbox Code Playgroud)

确实有效,但不使用变量,而是使用重定向文件.

ssh-keygen -lf /dev/stdin < alpha.pub
Run Code Online (Sandbox Code Playgroud)

这并没有工作,因为我得到一个模棱两可的重定向

ssh-keygen -lf /dev/stdin < $(echo $pubkey)
Run Code Online (Sandbox Code Playgroud)

我希望得到一些有识之士为如何获得SSH-凯基从与公钥的变量,如果可能的话,一个解释,为什么重定向没有做什么,我认为他们应该做阅读.具体来说,为什么|行为<与第三个例子的原因不同ambiguous redirect.我在线搜索,但许多重定向教程似乎没有回答我的问题.

Jür*_*zel 17

echo $pubkey | ssh-keygen -lf /dev/stdin
/dev/stdin is not a public key file.
Run Code Online (Sandbox Code Playgroud)

/ dev/stdin实际上是一个unix管道,而不是常规文件,因此ssh-keygen无法打开该文件

ssh-keygen -lf /dev/stdin  <<<$key
1024 92:6a:3f:5c:1f:78:.....
Run Code Online (Sandbox Code Playgroud)

/ 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)
Run Code Online (Sandbox Code Playgroud)

  • 在Ubuntu 14.04,Bash 4.3.11,内核3.13.0-24-generic上,这不起作用并报告`/ dev/stdin:Stale file handle`. (2认同)

Jan*_*bry 6

自7.2版(于2016-02-28发行)以来,现在可以通过-作为文件名进行传递。从发行说明中:

  • ssh-keygen(1):允许来自标准输入的指纹识别,例如 ssh-keygen -lf -

  • 随着 OpenSSH 7.2 的发布,这现在应该是公认的答案。所以`echo $pubkey | ssh-keygen -lf -` 或类似的,是现在要走的路。 (2认同)

hta*_*ess 5

/dev/stdin这是使用其他答案中描述的文件的单行。

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)
Run Code Online (Sandbox Code Playgroud)

请注意,这将破坏使用密码短语的私钥。它将与 AWS 或 OpenStack 生成的不使用密码短语的 pem 文件配合使用。