我试图通过bash
调用ssh-keygen
,使用一个变量作为输入,而不是文件,以获取公钥的指纹。我知道我可以使用临时文件来解决这个问题,但是由于这个问题范围之外的原因,我不想这样做。
此方法不起作用,因为它显示密钥文件无效(它肯定是正确的)
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
。我在网上搜索了一下,但许多重定向教程似乎都没有回答我的问题。
发布于 2010-04-14 19:33:37
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)
发布于 2010-04-14 15:01:41
如果要将字符串重定向为stdin,请使用以下语法:
cmd <<< "some $STR here"
如果要重定向命令的输出,就好像它是一个文件一样,可以这样做:
cmd <( /bin/somecmd )
如果你想使用一个命令作为输出文件,它大体上是一样的:
cmd >( /bin/othercmd )
发布于 2016-04-27 10:39:53
这是一个使用文件/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)
请注意,这将与使用密码短语的私钥断开。它将与由亚马逊网络服务或OpenStack生成的不使用密码短语的pem文件一起工作。
https://stackoverflow.com/questions/2635360
复制相似问题