Я пытаюсь звонить 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
. Я искал онлайн, но многие учебные руководства по перенаправлению, казалось, не отвечали на мои вопросы.
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)
Я бы рекомендовал использовать временный файл. Проблема в том, что при перенаправлении BASH ожидает файл. При использовании $ (echo $ pubkey) bash будет жаловаться, потому что после завершения подстановки он будет искать файл с таким именем, который создается подстановкой.
Если вы хотите перенаправить строку как стандартный ввод, используйте следующий синтаксис:
cmd <<< "some $STR here"
Если вы хотите перенаправить вывод команды, как если бы это был файл, вы делаете это следующим образом:
cmd <( /bin/somecmd )
И если хотите для использования команды в качестве файла ВЫВОДА это примерно то же самое:
cmd >( /bin/othercmd )