--passphraseを使用している場合でも、gpgにパスワードを要求します。

--passphraseを使用している場合でも、gpgにパスワードを要求します。

パスワードを要求せずにgpgファイルを抽出するには、次のコマンドを使用したいと思います。

  gpg --passphrase 1234 file.gpg

ところでパスワードを聞いてみますね。なぜ?

これも同じ動作をします。

  gpg --passphrase-file passfile.txt file.gpg

私はUbuntuとgnome 3を使用していますが、それがFedoraで実行されていたことを覚えています。

答え1

私はあなたと同じ状況にいます(Fedoraでは動作しますが、Ubuntuでは動作しません)。私が見つけた確かな解決策は次のとおりです。

echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg

説明:渡すと、ファイルから読み取るのではなくSTDINから読み取られます0--passphrase-fdしたがって、パスワードをパイピングすると、指定した--passphrase-fdパスワード文字列が許可されます。

答え2

2017年12月4日に更新されました。 (パスワードプロンプトを避けるために--batchを追加してください)

オプションを追加する必要があるかもしれません--batch

そして。使用する場合受信機キーペアを追加することもできます--pinentry-mode loopback

バージョン2以降のプロンプトがないことを確認するには、GPGこのオプションが必要です。--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.

キーIDを取得

だから今

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

または検索変数は--with-colons

while IFS=: read -r typeOfRec _ _ _ keyId _; do
    case $typeOfRec in pub ) break ;; esac
done < <(gpg  --with-colons -k [email protected] )
declare -p keyId 
declare -- keyId="43E6B96CAFABDEDF"

暗号化

今できます!

seq -f "%'8g" 990 5 1015 |
    gpg --batch --armor --recipient "$keyId" --encrypt --output 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-----

注:>=2.2次のバージョンは必要ありません。gpg``--batch

seq -f "%'8g" 990 5 1015 |
    gpg -aer "$keyId" >file.gpg

ほぼ同じ効果があります。

復号

それから

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

ただし、>=2.2バージョンから以下をgpg使用できます。

gpg -qd --passphrase "$(<password.txt)" file.gpg
     990
     995
   1'000
   1'005
   1'010
   1'015

答え3

gpg 2.xバージョンの場合は使用する必要はありません--batch

--pinentry-mode loopback  

--passphrase&で使用され、--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のgpg 2.1.18でテストされています。重要なオプションを無視するこれらの動作は、--passphraseまだバグでない場合は実際にバグである必要があります)

答え4

マニュアルページに従って gpg(GnuPG) 2.2.7 を使用する場合、

--passphrase-fd n

ファイル記述子 n からパスワードを読み込みます。ファイル記述子 n から最初の行のみを読み込みます。 n に 0 を使用すると、STDIN はパスワードを読み込みます。このオプションは、パスワードが1つだけ提供されている場合にのみ使用できます。

--passphrase ファイルファイル

file ファイルからパスワードを読み込みます。 file ファイルから最初の行だけを読み込みます。このオプションは、パスワードが1つだけ提供されている場合にのみ使用できます。明らかに、他のユーザーがファイルを読むことができる場合、ファイルに保存されたパスワードのセキュリティは疑わしいです。回避できる場合は、このオプションを使用しないでください。

--パスワード文字列

文字列をパスワードとして使用してください。このオプションは、パスワードが1つだけ提供されている場合にのみ使用できます。明らかに、マルチユーザシステムでは、これに対するセキュリティは非常に疑わしい。回避できる場合は、このオプションを使用しないでください。

--pinentry-mode loopback職場に追加

バージョン2.0以降、このパスワードは--batchオプションも提供されている場合にのみ使用されます。バージョン2.1以降、--pinentry-modeもループバックに設定する必要があります。

たとえば、

gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in

関連情報