私はGnuPGをパイプとして使用してバックアップを暗号化したいと思います(stdinから読み込み、stdoutに書き込みます)。パスワードはファイルから読み取られます。コマンド例:
echo "mysecret" | gpg --passphrase-file password.key --batch --symmetric --cipher-algo AES256 > test.gpg
通常のユーザーとして実行するとうまくいきます。ただし、rootとして実行すると、次の結果が表示されます。
gpg: gpg-agent is not available in this session
gpg: can't query passphrase in batch mode
gpg: error creating passphrase: invalid passphrase
gpg: symmetric encryption of `[stdin]' failed: invalid passphrase
--passphrase-file
ルートアクセス権を取得するにはどうすればよいですか?
--passphrase-fd 0
提案どおりには使用できません。ここstdinは暗号化するデータであるためです。 GPG 1.4.20(Ubuntu 16.04.5 LTSから)を使用しています。
答え1
入力に追加のファイル記述子を活用する解決策が見つかりました。
exec {FD}<password.key
echo "mysecret" | gpg --passphrase-fd ${FD} --batch --symmetric --cipher-algo AES256 > test.gpg
答え2
まず、ファイルシステムにパスワードを書くことに関連する別の答えを構築したいと思います。 printfコマンドの出力をファイル記述子としてキャプチャできます。
passphrase="topsecret"
exec {pw_fd}< <(printf "$passphrase")
echo "a total secret" | gpg --passphrase-fd ${pw_fd} --batch --symmetric --cipher-algo aes > test.gpg
exec {pw_fd}<&-
その後、テストします。
gpg -d --passphrase -i test.gpg
gpg: AES.CFB encrypted data
gpg: encrypted with 1 passphrase
a total secret