26

公開鍵のフィンガープリントを取得するために、ファイルの代わりに入力として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 を読み取らせる方法についての洞察と、可能であれば、リダイレクトが実行すべきだと思うことを実行しない理由についての説明をいただければ幸いです。具体的には、|が と異なる動作<をする理由と、3 番目の例が である理由ambiguous redirectです。オンラインで検索しましたが、リダイレクト チュートリアルの多くは私の質問に答えていないようでした。

4

5 に答える 5

20
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ヒアドキュメントを使用して作成された通常のファイルを指します。これを確認できます:

# 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-14T11:33:36.630 に答える
15

バージョン 7.2 (2016 年 2 月 28 日にリリース) 以降、これは-ファイル名として渡すことで可能になりました。リリースノートから:

  • ssh-keygen(1): 標準入力からのフィンガープリントを許可します。ssh-keygen -lf -
于 2016-04-08T07:01:31.087 に答える
4

/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 ファイルで動作します。

于 2016-04-27T02:39:52.953 に答える
4

文字列を stdin としてリダイレクトする場合は、次の構文を使用します。

cmd <<< "some $STR here"

コマンドの出力をファイルであるかのようにリダイレクトする場合は、次のようにします。

cmd <( /bin/somecmd )

また、コマンドを OUTPUT ファイルとして使用する場合は、ほぼ同じです。

cmd >( /bin/othercmd )
于 2010-04-14T07:01:40.953 に答える
-2

一時ファイルを使用することをお勧めします。問題は、リダイレクト、BASH がファイルを想定していることです。$(echo $pubkey) を使用すると、bash はエラーを出します。これは、置換が完了すると、置換によって作成されるその名前のファイルが検索されるためです。

于 2010-04-14T06:55:36.320 に答える