Encryption

加密離線IMAP密碼

  • October 3, 2020

我正在嘗試設置 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 就可以了。

我使用以下方法,效果很好:

  1. 將您的密碼儲存在單獨的 gpg 加密文件中。例如~/.passwd/<accountname>.gpg

  2. 使用您選擇的名稱(例如,)創建一個 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 ""
  1. 修改你的 .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()

引用自:https://unix.stackexchange.com/questions/44214