私は特定のバージョンを簡単に保存し、暗号化されたバックアップを維持できるようにプロジェクトアーカイブを作成してから7zアーカイブを生成するスクリプトを書いています。
アーカイブを作成して暗号化フェーズに入った後、可能であれば、gpg
ユーザーが一度だけパスワードを入力するように、1回の呼び出しでファイルを暗号化したいと思います。それ以外の場合は、ユーザーのパスワードをメモリにキャッシュする必要があるか(本当にしたくない)、アーカイブされたすべてのエントリに対してパスワードを入力して確認する必要があります(これは悪いことです)。
gpg
複数のファイル名を渡して一度にすべて暗号化する方法はありますか?
私がこれをしようとすると:
$ gpg --cipher-algo AES256 --compression-algo BZIP2 -c project1.7z project2.7z
...シェルに次のエラーが表示されます。
usage: gpg [options] --symmetric [filename]
私が達成したいことを達成する方法はありますか?
答え1
GnuPGはそれを直接サポートしていないので、これを行う方法は例えばtar
。
tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg
そして以下を抽出します。
gpg -d projects.gpg | tar x
project1.7z
とが残りますproject2.7z
。これにより、中断した部分からスクリプトを続行できます。
答え2
Is there a way to pass multiple filenames to gpg to have it encrypt all of
them in one go?
いいえ、そこではありません。
次のgpgオプションのいずれかを使用してパスワードを渡すことができます(後者が最も安全なオプションです)。
--passphrase
--passphrase-file
--passphrase-fd
答え3
現在、gpgには次のオプションがあります。
gpg --encrypt-files --recipient [email protected] *.txt
.txt.asc
各ファイルに1つのファイルを作成します.txt
。
引用:
man gpg
オプション--verify-files
、--encrypt-files
および--decrypt-files
--multifile
- https://linoxy.com/gpg-command-encrypt-decrypt-file/
答え4
今日は、次のことをうまく行いました。
ディレクトリをターゲットファイルを含むディレクトリに変更し、Bashスクリプトを実行して必要なfile_namesを見つけて、.txtというテキストファイルに一覧表示します
found.txt
。gpg2にループ内の各ファイル名を読み込んでメモリ変数に入れ、同じループ内で私の署名キーで暗号化し、読み込み可能にするように要求するBashスクリプトを実行します。 gpg2はパスワード入力のためのポップアップを表示します。これにはセッション全体でパスワードフレーズをアクティブに保つことを選択できる小さなチェックボックスがあります。これは悪い習慣ですが、その時点でネットワークに接続されておらず、セッションを暗号化してすぐに電源が切れると、それは悪くありません。
唯一の問題は、処理する必要があるy / nがあることです。それで、Yキーを押したところ1分以内になり、51個のファイルが暗号化されました。
スクリプトは次のとおりです。
「検索」スクリプトは次のスクリプトですFindFilesAndListtoTextfile.sh
。
#! /usr/bin/bash
#Try this to list the files you want using the appropriate file identifier i.p.o "DSCN.*":
source="/home/myself/Whatever #note no gaps on either side of the equal-to sign
target="/home/myself/Whatever/found.txt"
find $source -name "*DSCN*" -type f > $target
暗号化スクリプトの名前は ReadFilenameAndEncrypt.sh です。
#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
done < "$1"
一般ユーザーとして実行されます。
$ bash ReadFilenameAndEncrypt.sh found.txt
お役に立てば幸いです。まだy / nを避ける方法が見つかりませんでした。