ssh-keygen accepting stdin ssh-keygen accepting stdin linux linux

ssh-keygen accepting stdin


echo $pubkey | ssh-keygen -lf /dev/stdin/dev/stdin is not a public key file.

/dev/stdin is actually a unix pipe, not a regular file, so ssh-keygen fails to open the file

ssh-keygen -lf /dev/stdin  <<<$key1024 92:6a:3f:5c:1f:78:.....

/dev/stdin refers to a regular file, created by using a bash heredoc. You can verify this:

# ls -l /dev/stdin <<<$pubkeylrwxrwxrwx 1 root root 15 Feb 11 08:07 /dev/stdin -> /proc/self/fd/0# ls -l /proc/self/fd/0 <<<$pubkeylr-x------ 1 juergen juergen 64 Apr 14 13:31 /proc/self/fd/0 -> /tmp/sh-thd-1271250023 (deleted)


Since version 7.2 (released on on 2016-02-28), this is now possible by passing - as the file name. From the release notes:

  • ssh-keygen(1): allow fingerprinting from standard input, e.g. ssh-keygen -lf -


If you want to redirect a string as stdin, use this syntax:

cmd <<< "some $STR here"

If you want to redirect the output of a command as if it was a file, you do it like this:

cmd <( /bin/somecmd )

And if you want to use a command as an OUTPUT file, it's more or less the same:

cmd >( /bin/othercmd )