を使用してもパスワードを要求します次のコマンドは、パスワードを要求せずにgpgファイルを抽出することを期待しています:
gpg --passphrase 1234 file.gpg
ただし、パスワードを要求されます。なぜですか?
これも同じ動作です:
gpg --passphrase-file passfile.txt file.gpg
gnome 3でUbuntuを使用していますが、Fedoraで機能していたことを覚えています。
コメント
回答
私はあなたとまったく同じボートに乗っています(Fedoraでは動作しましたがUbuntuでは動作しませんでした)。私が発見した明らかな回避策は次のとおりです。
echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg
説明:0
を渡すと--passphrase-fd
ファイルからではなくSTDINから読み取ります。したがって、パスフレーズをパイプすると、--passphrase-fd
が指定されたパスワード文字列を受け入れるようになります。
コメント
- 追加上記の
--batch --yes
は私にとってはうまくいきました。 - しかし、gpgにパイプされるデータを暗号化する場合、問題が発生します。
echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg
。これを解決するにはどうすればよいですか? - Ubuntuバージョンのgpgでは、
echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg
が機能しているようです。 - I 'ここで、
--batch
の有無にかかわらずInappropriate ioctl for device
を取得しています(gpg(GnuPG)2.1.18)。 - @RyanGriggsそうは思いません。
echo "hello" | cat
とecho "hello"| cat
はどちらも同じ文字列を生成します。
回答
2017年12月4日にアップグレードされました。 (パスフレーズプロンプトを防ぐために–batchを追加します)
--batch
オプションを追加する必要がある場合があります:
そして。 受信者キーペアを使用していますか?--pinentry-mode loopback
も追加する必要がある場合があります。
、プロンプトが表示されないようにするには、オプション--batch
が必要です…わかりました:
$ gpg --version gpg (GnuPG) 2.1.18 libgcrypt 1.7.6-beta Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /home/user /.gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2
試してみる:
$ newdir=$(mktemp -d) $ cd $newdir $ seq 1 10 | gpg -c --batch --passphrase 1234 -o file.gpg - $ ls -ltr total 4 -rw-r--r-- 1 user user 91 Dec 4 15:42 file.gpg $ hd file.gpg 00000000 8c 0d 04 07 03 02 ea fa d0 d3 2b 9a ea 06 df d2 |..........+.....| 00000010 4a 01 ed 50 74 ff 27 45 0e 6c 94 74 db e9 8a a5 |J..Pt."E.l.t....| 00000020 03 9f 67 a0 73 97 e9 15 6b 56 a0 f0 88 71 85 a8 |..g.s...kV...q..| 00000030 dc 41 71 9f fa 3b f9 9d af ac 80 eb f4 f7 28 19 |.Aq..;........(.| 00000040 9f be 75 47 e6 d8 00 3e f6 60 f1 00 5e 63 57 ef |..uG...>.`..^cW.| 00000050 14 c3 4b 20 ff 94 03 03 c1 fc 98 |..K .......| 0000005b
いいですね!さて、今:
$ gpg -d --batch --passphrase 1234 file.gpg gpg: AES encrypted data gpg: encrypted with 1 passphrase 1 2 3 4 5 6 7 8 9 10
-d
パラメータは指定されていませんが(SOの質問と同じ構文)、 file.gpg
から復号化されたデータは新しいfile
に抽出されます。
$ gpg --batch --passphrase 1234 file.gpg gpg: WARNING: no command supplied. Trying to guess what you mean ... gpg: AES encrypted data gpg: encrypted with 1 passphrase $ ls -ltr total 8 -rw-r--r-- 1 user user 91 Dec 4 15:42 file.gpg -rw-r--r-- 1 user user 21 Dec 4 15:44 file $ cat file 1 2 3 4 5 6 7 8 9 10
これでうまくいきます!
$ cd - $ rm -fR $newdir $ unset newdir
受信者キーファイルの場合:
最初のクリーンなテンポの作成
newdir=$(mktemp -d) cd $newdir export GNUPGHOME=$newdir echo YourPassword >password.txt gpgconf --kill gpg-agent # Required, if agent_genkey fail... gpg --generate-key --batch <<eoGpgConf %echo Started! Key-Type: default Key-Length: default Subkey-Type: default Name-Real: Full Name There Name-Comment: Something funny Name-Email: [email protected] Expire-Date: 0 Passphrase: $(<password.txt) %commit %echo Done. eoGpgConf gpg: keybox "/tmp/tmp.xU5Ldyr4iB/pubring.kbx" created gpg: Started! gpg: agent_genkey failed: No such file or directory gpg: key generation failed: No such file or directory gpg: Done.
うーん。
gpgconf --kill gpg-agent gpg --generate-key --batch <<eoGpgConf %echo Started! ... eoGpgConf gpg: Started! gpg: key 43E6B96CAFABDEDF marked as ultimately trusted gpg: directory "/tmp/tmp.xU5Ldyr4iB/openpgp-revocs.d" created gpg: revocation certificate stored as "/tmp/tmp.xU5Ldyr4iB/openpgp-revocs.d/DF223E1612CF917DC3BD42AA43E6B96CAFABDEDF.rev" gpg: Done.
次に
gpg -k /tmp/tmp.xU5Ldyr4iB/pubring.kbx ------------------------------- pub rsa3072 2020-06-19 [SC] DF223E1612CF917DC3BD42AA43E6B96CAFABDEDF uid [ultimate] Full Name There (Something funny) <[email protected]> sub rsa3072 2020-06-19 [E]
次に、パブのフィンガープリントの最後の8文字をキーエイリアスとして使用できます。
gpg -k [email protected]| sed -e "/^pub/{N;s/.*\(.\{16\}\)/\1/;p;s/^.\{8\}//;q};d" 43E6B96CAFABDEDF AFABDEDF
わかりました、今すぐ!
seq -f %\"8g 990 5 1015 | gpg --batch --armor --recipient AFABDEDF --encrypt --output file.gpg
または
seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o file.gpg
次のようになります:
cat file.gpg -----BEGIN PGP MESSAGE----- hQEOA5BNpEVKPGsfEAP/XutJp7ME3I1MqG0vZyIS8w+npPQMPicIpQUwM4OVO1rX 2lhrymp0zGqxAH7s9Dh9YJNRA/9zYCO4/vghtnnl/zg10vILs9btgLXY+aupgoQ9 nifnVC8JJ1DC+hZZrIHyzS73BsjufWhpbwURYc7EgIMGKu2TRiy5I8+0aZ4zAtID /ApL0sTBQ9hqmIatzaYbX9ajmDf1vvtE2/s3MUFA/hIqew2MVMhlb4RjyT7ix03P LmCH2Mfy88VGr59eSUoZq+CPMDSZpXxbE2LfyPHYsObraO+a6FdVHhj2xcw/tnDO TcNHTKnTRJSb9sfLAtJmE9eaxebkl27T+UvqyJUG4dgu0lABadboNaEidlrCYLNi icR19UX0G7E50+i3iKvw0u81YtciYyOnpHvgazb5QbqJNN5P8izC4J3FqW7HaTDI xnf+8IaX2Vqrq5+k4qLR7h5Vcw== =1fb5 -----END PGP MESSAGE-----
次に
gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
または
gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
レンダリング:
gpg: encrypted with 3072-bit RSA key, ID 58020687E0746339, created 2020-06-19 "Full Name There (Something funny) <[email protected]>" 990 995 1"000 1"005 1"010 1"015
コメント
- 警告が表示されない" gpg:gpg-agentは使用できませんこのセッションでは"、おそらくエージェントにパスフレーズが保存されていますか?
- @AsfandYarQaziいいえ、パスフレーズはコマンドラインで入力されます。
- この答えは私にとってはうまくいきました。 gpg1.4.16のUbuntu。
--passphrase
パラメータはバッチ操作で機能し、'パスワードの入力を求めません。 - これは動作しているように見えます。システムを完全に再起動して最初からやり直すか、間違った–passphrase 5678(間違ったパスフレーズ)を入力してみてください。
- 下の回答を参照してください。キーは
--pinentry-mode loopback
です。動作します!
回答
gpgバージョン2の場合。x --batch
を使用する必要はありません。
--pinentry-mode loopback
は & --passphrase-file
。ファイル名が競合する場合などに、新しい情報を入力できます。
gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg ... File "encrypted" exists. Overwrite? (y/N)n Enter new filename: f2
--batch
とは異なり、...failed: File exists
と言うとすぐに失敗します。
(Debian Stable / Stretchのgpg2.1.18でテスト済み。重要な--passphrase
オプションを無視するこの動作は、まだバグでない場合は、実際にはバグであるはずです)
コメント
- これはUbuntu18.04 Bionic with gpg(GnuPG)2.2.4でもうまく機能します
- これはインストール後のMacOSで機能しますgpg with homebrew
- これは私のために機能します
cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
- ありがとう、復号化にも機能します
回答
あなたはgpg2を使用しているようです。 --batch
オプションも投入する必要があります。 (これをスクリプトに追加することを計画している場合は、--no-tty
およびおそらく--yes
も追加する必要があります。)
コメント
- それ' 1.4。 –batchを使用しても効果はありません。
- 申し訳ありませんが、@ Nimaです。 '何を言えばいいのかわかりません。 GnuPG v1.4では、'これらのオプションのいずれかを使用してパスフレーズを渡すために、他に何もする必要はありません。
- 良いメモ、@ rsawが役に立ちましたパスワードプロンプトを防止します(そして少し洗練されていないecho / STDINオプション)。
- -バッチはWindowsでも役立ちました。 woohoo。
回答
「-no-use-agent」を追加すると、これが解決されました。 “gpg(GnuPG)1.4.16″:
date > foo echo pass > passphrase # w/o --no-use-agent > rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --symmetric foo 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 `foo" failed: invalid passphrase > rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --no-use-agent --symmetric foo > ls -al total 20 drwxr-xr-x 2 root root 4096 Aug 22 13:59 . drwx------ 18 root root 4096 Aug 22 13:58 .. -rw-r--r-- 1 root root 30 Aug 22 13:58 foo -rw-r--r-- 1 root root 103 Aug 22 13:59 foo.gpg -rw-r--r-- 1 root root 5 Aug 22 13:58 passphrase
回答
If gpg(GnuPG)の使用2.2.7マニュアルページによると、
-passphrase-fd n
からパスフレーズを読み取りますファイル記述子n。最初の行のみがファイル記述子nから読み取られます。 nに0を使用すると、パスフレーズはSTDINから読み取られます。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。
-passphrase-file file
ファイルファイルからパスフレーズを読み取ります。最初の行のみがファイルファイルから読み取られます。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。明らかに、ファイルに保存されているパスフレーズは、他のユーザーがこのファイルを読み取ることができる場合、セキュリティに問題があります。回避できる場合は、このオプションを使用しないでください。
-パスフレーズ文字列
パスフレーズとして文字列を使用します。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。これは、マルチユーザーシステムでは非常に疑わしいセキュリティです。回避できる場合は、このオプションを使用しないでください。
add --pinentry-mode loopback
が機能するために
バージョン2.0以降、このパスフレーズはオプション–batchも指定されている場合にのみ使用されることに注意してください。バージョン2.1以降、-pinentry-modeもループバックに設定する必要があります。
例:
gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in
コメント
-
--batch
と--pinentry-mode loopback
オプション? v.2.1.18では、情報ページにバッチ&のピンエントリについて同じことが記載されていますが、それでも–pinentry …のみで機能します。両方の場合v.2.2.7には本当に必要であり、それから物事はばかげており、開発者は意図的に深刻なバグを導入しています
回答
read -sp "Enter passphrase: " pass echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --symmetric -o /path/to/saved/file.jpg.gpg /path/to/file.jpg echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --decrypt -o /path/to/decrypted/file.jpg /path/to/encrypted/file.jpg.gpg
回答
私にとっては魔法のように機能しました:
echo "YOUR_PASS_PHRASE" | gpg --batch --yes --passphrase-fd 0 /home/somewhere/your_file.pgp
コメント
- エラー:
gpg: no valid OpenPGP data found. gpg: processing message failed: eof
。何かアイデアはありますか?
回答
やってみましたか:
gpg --batch --passphrase-fd 0 --decrypt-files *.gpg gpg --passphrase-fd 0 1234 file.gpg
出典:こちら
回答
man gpgで説明されているように、次のオプションを使用できます
-pinentry-mode modepinentryモードをmodeに設定します。モードに許可される値は次のとおりです。
default Use the default of the agent, which is ask. ask Force the use of the Pinentry. cancel Emulate use of Pinentry"s cancel button. error Return a Pinentry error (``No Pinentry""). loopback Redirect Pinentry queries to the caller. Note that in contrast to Pinentry the user is not prompted again if he enters a bad password.
したがって、このユーザーエージェントモードを “–pinentry-modeに変更すると、gpgのデフォルトの動作はユーザーにパスフレーズの入力を求めることです。ループバック “それは完全にうまく機能します。完全なコマンド
gpg --pinentry-mode loopback --passphrase <passphrase> -d <file to decrypt>
回答
渡すには非常に安全な方法だと思いますコマンドラインへのパスワードは次のとおりです。
gpg --passphrase-file <(echo password) --batch --output outfile -c file
これにより、「echo」コマンドが生成され、ファイル記述子がパス名としてに渡されます。 gpg(例:/ dev / fd / 63)。 gpgはそこからキーを読み取ります。その間、echoコマンドは並行して実行され、すぐに終了して、キーをfdのバッファーに残しておく必要があります。
利点は次のとおりです。
- gpgコマンドのコマンドラインにパスワードがありません
- エコーは短命です。実際、ほぼ瞬時に実行する必要があります
- パスワードがディスクに存在することはなく、削除するファイルはなく、コマンドが中断されても残りはありません
回答
ubuntuでgpgが$ DISPLAYが設定されているかどうかパスワードを尋ねようとしていると言っても、信じられません。設定を解除すると、コマンドライン–passwordから取得します。これは期待どおりに機能します:
DISPLAY= gpg --symmetric --passphrase pass --batch
私が推測するオーバーエンジニアリングのもう1つの例です。
回答
ここにリンクを stackoverflow の回答にリンクします。これは、さらに役立つ可能性があります。一括復号化/暗号化を行うプロジェクトで、 GnuPG がパスフレーズに非常に厳しいため、--passphrase
がまれにしか機能しないという難しい方法を学びました。代わりに検討してください。 --passphrase-fd
オプションの信頼性を高めます。
このスクリプトは適切な / em> --passphrase -fd
オプションの使用。 Travis-CI を介して公開テストされており、実際のログを確認できます。
ここにサンプルコードを提供せずに回答へのリンクを投稿するだけではないので、ここで遊ぶことができる更新された「スタンドアロン」スクリプトを示します。
#!/usr/bin/env bash # Set some variables for easy modding Var_fd="9" Var_pass="/path/to/passphrase.file" Var_gpg_opts="--passphrase-fd ${Var_fd} --decrypt" Var_output_location="out.txt" Arr_string=( "$@" ) # Open file descriptor and shove the passphrase file into it if [ -f "${Var_pass}" ]; then exec ${Var_fd}<"${Var_pass}" else exec ${Var_fd}<(echo "${Var_pass}") fi # Pipe input array though gpg and append to output file cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_opts} >> ${Var_output_location} # Do not forget to close the file descriptor exec ${Var_fd}>&-
上記は、liほど派手ではありませんがGitHubでのnkedprotectは、この投稿の冒頭にリンクされている回答よりもさらに機能的である必要があります。
ハッピーハッキング。
回答
Linuxマシンで作業していることがわかった簡単な方法の1つは、次のとおりです。1)gpgにキーをインポートする:=> shell> gpg —import private_key.key
2)出力ファイル名を指定して復号化します:=> shell> gpg —output -d
2.1)上記のコマンドを指定すると、言い換えを入力するように求められます。言い換えを入力すると、gpgファイルが復号化されます。
回答
gpg2 -se --passphrase yourpassword --batch --yes -r [email protected] filename
コメント
- これで問題が解決する理由を説明できれば幸いです
- このコードスニペットは、説明を含めて質問を解決する可能性があります投稿の品質を向上させるのに本当に役立ちます。あなたは今尋ねている人だけでなく、将来読者のために質問に答えていることを忘れないでください!回答を編集して説明を追加し、適用される制限と前提条件を示してください。
回答
~/.gnupg/gpg.conf
の最後に入力:
use-agent pinentry-mode loopback
(おそらく新しい)ファイルの最後に置く~/.gnupg/gpg-agent.conf
:
allow-loopback-pinentry
次に、このコマンドを実行します:
echo RELOADAGENT | gpg-connect-agent
これで、パスワードを要求せずにこれを実行できます:
echo "$1" | gpg2 --trust-model always --clearsign --batch --no-tty --quiet --no-verbose --yes -u $2 --digest-algo SHA512 --s2k-digest-algo SHA512 --passphrase "$3"
$ 1が暗号化されるテキスト、$ 2がユーザーID、$ 3がパスワードです。
注:なぜ機能するのか思い出せませんが、機能します。詳細を知っている場合は、ここで編集して挿入してください。
回答
Ubuntu18.04の場合これでうまくいきました-
暗号化:
pass="123" gpg -c --batch --passphrase "$pass" some-file.tgz
復号化:
gpg some-file.tgz.gpg
回答
同じ問題に直面していましたが、どれもoここに記載されているコマンドが機能せず、さまざまなコマンドでさまざまな回答を確認しましたが、何も機能しませんでした。
Ubuntu 20.04.1 LTS
たくさんのヘッドバッシングとなんとかして実験した後
gpg --pinentry-mode loopback --passphrase-file=passphrase.txt --decrypt-files my-encrypted-gpg-file.gpg
passphrase.txt
ファイル明らかに、passphrase.txtが含まれています。
お役に立てば幸いです。
gpg
は、エイリアスやラッパーではなく、正しいコマンドを実行しますか?/usr/bin/gpg --passphrase 1234 file.gpg
、type gpg
、gpg --version
、set | grep '^.\{0,9\}PG'
gpg --list-packets --batch myFile.gpg
はパスフレーズの入力を求めますが、' t in GPG 1.x.それは私の問題でした(私が' m作成しているプログラムでは)、私はあなたの問題があると思っていました( –list-packetsは復号化を試みる前に最初に実行され、'気づかなかった)。そこで、ファイルが暗号化されているかどうかを判断する新しい方法を作成しました。gpg --version
2.x(Ubuntu 18.04など)を使用している場合は、Xen2050 'の回答にジャンプします: unix.stackexchange.com/a/415064/237055