代码之家  ›  专栏  ›  技术社区  ›  Ryan

ssh keygen接受stdin

  •  18
  • Ryan  · 技术社区  · 16 年前

    我正在打电话 ssh-keygen 通过使用变量 bash 作为输入而不是获取公钥指纹的文件。我知道我可以使用一个临时文件来解决这个问题,但是出于超出这个问题范围的原因,我不想这样做。

    这个方法可以 按它所说的方式工作,密钥文件无效(它肯定是正确的)

    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 . 我在网上搜索,但很多重定向教程似乎没有回答我的问题。

    5 回复  |  直到 10 年前
        1
  •  16
  •   Jürgen Hötzel    16 年前
    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)
    
        2
  •  4
  •   tylerl    16 年前

    如果要将字符串重定向为stdin,请使用以下语法:

    cmd <<< "some $STR here"
    

    如果要像文件一样重定向命令的输出,请执行以下操作:

    cmd <( /bin/somecmd )
    

    如果您想使用命令作为输出文件,它或多或少是相同的:

    cmd >( /bin/othercmd )
    
        3
  •  4
  •   Jan Fabry    10 年前

    自7.2版(2016-02-28发布)以来,现在可以通过 - 作为文件名。 From the release notes:

    • ssh keygen(1):允许从标准输入进行指纹识别,例如 ssh-keygen -lf -
        4
  •  0
  •   htaccess    10 年前

    这是一个使用文件的一行程序 /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)
    

    请注意,这将与使用密码短语的私钥中断。它将与AWS或OpenStack生成的不使用密码的PEM文件一起工作。

        5
  •  -1
  •   The Monster    16 年前

    我建议使用临时文件。问题是重定向时,bash需要一个文件。通过使用$(echo$pubkey),bash会抱怨,因为完成替换后,它将查找替换创建的同名文件。