加密離線IMAP密碼
我正在嘗試設置 OfflineIMAP 以通過 gpg 加密文件進行身份驗證(這樣我可以將所有加密合併到我的 gpg-agent 程序)。
從文件來看,加密伺服器密碼的唯一方法似乎是使用 gnome-keyring (我不想在我的無頭伺服器上執行)。有沒有辦法像使用 mutt 一樣從 gpg 文件中輸入我的密碼?
我知道您可以使用擴展 python 文件向offlineimap 添加額外的功能,但恐怕我不知道從哪裡開始。
另一種讓offlineimap在知道你的密碼的情況下執行但不將密碼放在磁碟上的方法是讓offlineimap在tmux/screen中執行,並
autorefresh
在你的設置中啟用~/.offlineimaprc
您需要添加
autorefresh = 10
到[Account X]
offlineimaprc 文件的部分,以使其每10 分鐘檢查一次。同時刪除任何帶有password
或的配置行passwordeval
。然後執行 offlineimap - 它會詢問您的密碼並將其記憶體在記憶體中。它不會在第一次執行後退出,而是會休眠 10 分鐘。然後它會喚醒並再次執行,但它仍會記住您的密碼。
因此,您可以讓一個 tmux 會話與 offlineimap 一起執行,輸入您的密碼一次,然後離線imap 就可以了。
我使用以下方法,效果很好:
將您的密碼儲存在單獨的 gpg 加密文件中。例如
~/.passwd/<accountname>.gpg
使用您選擇的名稱(例如,)創建一個 python 擴展文件,
~/.offlineimap.py
其內容如下: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 ""
- 修改你的 .offlineimaprc 文件,告訴它有關 python 文件的資訊,並告訴它如何讀取你的密碼
[general] pythonfile = ~/.offlineimap.py # ... [Repository <reponame>] # add this line for each remote repository remotepasseval = mailpasswd("<accountname>")
如果您有多個同時檢查的帳戶(單獨的執行緒),並且您使用 gpg-agent,那麼它會要求您為每個帳戶輸入密碼。我通過創建一個文件 (
echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg
) 來啟動代理,並通過在啟動離線 imap 時解密此文件來啟動 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()