GPG暗号化ファイルを介して認証するためにOfflineIMAPを設定しようとしています(すべての暗号化をgpg-agentプロセスに統合できるように)。
ドキュメントによると、サーバーパスワードを暗号化する唯一の方法はgnome-keyringを使用することです(ヘッドレスサーバーではこれを実行したくありません)。 muttを使用しているかのようにgpgファイルにパスワードを入力する方法はありますか?
Pythonファイル拡張子を使用してオフラインマップを使用してアドインを追加できることを知っていますが、どこから始めるべきかわかりません。
ベストアンサー1
私は非常にうまく動作する次の方法を使用します。
1)パスワードを別のGPG暗号化ファイルに保存します。例えば~/.passwd/<accountname>.gpg
~/.offlineimap.py
2) 次の内容を含め、必要な名前(例:)でPython拡張ファイルを作成します。
def mailpasswd(acct):
acct = os.path.basename(acct)
path = "/home/<username>/.passwd/%s.gpg" % acct
args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
try:
return subprocess.check_output(args).strip()
except subprocess.CalledProcessError:
return ""
3).offlineimaprcファイルを修正してPythonファイルについて知らせ、パスワードを読む方法を教えてください。
[general]
pythonfile = ~/.offlineimap.py
# ...
[Repository <reponame>]
# add this line for each remote repository
remotepasseval = mailpasswd("<accountname>")
複数のアカウントを同時に確認し(別々のスレッド)、gpg-agentを使用している場合は、各アカウントのパスワードを求めるメッセージが表示されます。ファイル()を作成してエージェントを起動し、オフラインマップが起動したらファイルを復号化してgpgエージェントを起動します。これを行うには、最後に次を追加します。echo "prime" | gpg -e -r [email protected] > ~/.passwd/prime.gpg
~/.offlineimap.py
def prime_gpg_agent():
ret = False
i = 1
while not ret:
ret = (mailpasswd("prime") == "prime")
if i > 2:
from offlineimap.ui import getglobalui
sys.stderr.write("Error reading in passwords. Terminating.\n")
getglobalui().terminate()
i += 1
return ret
prime_gpg_agent()