ssh-keygen, принимающий stdin

Я пытаюсь звонить 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. Я искал онлайн, но многие учебные руководства по перенаправлению, казалось, не отвечали на мои вопросы.

20
задан Ryan 14 April 2010 в 06:48
поделиться

3 ответа

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)
17
ответ дан 30 November 2019 в 00:55
поделиться

Я бы рекомендовал использовать временный файл. Проблема в том, что при перенаправлении BASH ожидает файл. При использовании $ (echo $ pubkey) bash будет жаловаться, потому что после завершения подстановки он будет искать файл с таким именем, который создается подстановкой.

-2
ответ дан 30 November 2019 в 00:55
поделиться

Если вы хотите перенаправить строку как стандартный ввод, используйте следующий синтаксис:

cmd <<< "some $STR here"

Если вы хотите перенаправить вывод команды, как если бы это был файл, вы делаете это следующим образом:

cmd <( /bin/somecmd )

И если хотите для использования команды в качестве файла ВЫВОДА это примерно то же самое:

cmd >( /bin/othercmd )
4
ответ дан 30 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: