シェル出力またはSTDOUTに即座に署名する方法は?

シェル出力またはSTDOUTに即座に署名する方法は?

コンプライアンスレポートとロギングのために、特定のコマンドの出力にタイムスタンプを付けて署名するのが好きです。

たとえば、「端末にGUIがインストールされていることを確認する「、もう少し安定して部材を記録したいです(注:...一般的に要求されたものよりも多くのスクリーンショット)システムにコピーして貼り付けることができるだけでなく、結果を外部文書に保存または印刷することもできます。

どうすれば簡単な方法でこれを達成できますか?

答え1

次のように」デジタル署名の使用openssl「そして」stdout2回使用「私は次の方法を考えました。

echo "$(type Xorg 2>&1; date)" | tee /dev/tty | openssl dgst -sha256 -sign operator.priv.key | xxd -p

「一緒に…」シェルからバイナリデータを16進数に変換する「そして要求された結果

タイムスタンプと署名付き出力

-bash: type: Xorg: not found
Tue Jul 18 10:00:00 CEST 2023
ba97f858f3c62b71b08d26558eeb761214e5ad88f3511debe3b7976e8589
5b630737dce1999d9edf9d96414d88d60f12f5fe934e11d7b75ef7dfc617
2aec44e4baa3ea2eef37e73ee5fdec806dd922b2bbc4b75ec321fb9ac112
5fcd955989ff50f8c17938e42cf3db996f5a9061420842bea360c21b23a7
6faa8c464c7dfb6db1a97d7a57fc539bad0f7116f47741d29d44c0f663fb
c356b46388632303fddf78478e504935a7d8dd2936c4776cb47b2685adc3
ab234f911ca5f9b7dcc449b1158df7aac5c9ba9bad019cd30ef1eb56a76d
bb56ba0127a69e7e1ea07f8a4e6b346e6129e052b10376de14d6192289ba
18fa748e271aa97e3399cb933f1cd5b2

のための」コマンド出力を変数に保存するときは、改行を保持します。「、引用符が必要です。そして」標準出力と標準エラーのリダイレクトと追加「一部の注文はstderr見ているだけだからです。


参考までに、私は調査中にCLIでコマンドにタイムスタンプを表示する2つの異なる方法を見つけました。コマンド出力の各行の前にタイムスタンプを追加します。「そして」Linuxシェルでコマンドを実行すると、現在の時刻と日付が印刷されます。しかし、まだテストしていません。

上記の出力はドキュメントには役に立たないので、それを元に戻す方法がない場合は明らかに問題があるはずです。

出力を確認するには?

出力を確認するには、16進情報を再び2進数に変換「渡す

echo -n '${SIG}' | xxd -r -p > stdout.sig

後で確認して

openssl dgst -sha256 -verify operator.pub.key -signature stdout.sig stdout

完全なテスト例

echo "$(type Xorg 2>&1; echo 'Tue Jul 18 10:00:00 CEST 2023')" | tee stdout | tee /dev/tty | openssl dgst -sha256 -sign operator.priv.key | tee stdout.sig | xxd -p
-bash: type: Xorg: not found
Tue Jul 18 10:00:00 CEST 2023
ba97f858f3c62b71b08d26558eeb761214e5ad88f3511debe3b7976e8589
...
18fa748e271aa97e3399cb933f1cd5b2
openssl dgst -sha256 -verify operator.pub.key -signature stdout.sig stdout
Verified OK

これは、stdout出力と署名付きファイルを確認するのに役立ちます。Linuxでバイナリファイルを比較するには?

関連情報