Gentoo Linux GPGは、パラメータを介して渡されるファイルを適切に暗号化しますが、標準入力から読み取るときに「デバイスに不適切なioctl」をスローします


23

Gentoo Hardenedをカーネル4.1.7-hardened-r1で実行していDISPLAYます。パスワードプロンプトにpinentry-cursesを使用するために、SSHから開かれたシェルセッションからGPGを使用し、変数を無効にしてファイルを暗号化しようとしています。使用gpg -o file.gpg --symmetric fileすると、うまく暗号化できます。使用するpv file | gpg -o file.gpg --symmetricと、次のエラーメッセージが表示されます。

gpg-agent[30745]: command get_passphrase failed: Inappropriate ioctl for device

回答:


41

このドキュメントのように、yout GPG_TTY変数を設定して動作させる必要があります

GPG_TTY=$(tty)
export GPG_TTY

これらの2行は.bashrc(bashを想定)にあるはずなので、新しいターミナルセッションを開くたびに実行されます。

ただし、別の解決策がありますpv。bashでは、プロセス置換を使用して、実行してファイルのふりをすることができます。

gpg -o file.gpg --symmetric <(pv file)

そのため、追加の入力を予期するプログラムに物事をパイプインすることは良い考えではありません。予想とは異なる動作をする可能性があります。


この動作を変更または修正する方法はありますか?今、Debianでまったく同じread-from-stdinコマンドを試したところ、GPGはパスワードを要求しました。
RAKK

@RAKK結果のファイルを解読できますか?
TNW

はい、Debianに支障はありません。と呼ばれるランダムなデータで小さなファイルを作成しdsfargeg、暗号化してpv dsfargeg | gpg -o dsfargeg.gpg --symmetric、プロンプトが表示されgpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpgたらパスワードを入力し、出力を復号化して、パスワードを入力して、元のファイルと復号化されたファイルをで比較しますsha256sum dsfargeg dsfargeg.gpg.dec。両方のハッシュは同じになります。
RAKK

@RAKKその通りです。/dev/ttyDebian でgpgが開かれているようです。私の場合、これはバージョン1.4でした。それ以来、gpgは少し見直されました。何らかの理由でそのアプローチは取り下げられたかもしれません-あなた自身でもっと調べたいかもしれません(あるいは、これはDebian固有のパッチかもしれません)。そのため、おそらくそれを当てにしない方が良いでしょう。トレースを掘り下げて、新しいgpgで何が起こっているかを確認します(2.1があります)。
TNW

奇妙なことに、私は解決策を見つけました!GPG_TTY変数を設定すると、それができます。それに応じて答えを更新します。
TNW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.