मैं निम्नलिखित विधि का उपयोग करता हूं, जो काफी अच्छी तरह से काम करता है:
1) अपने पासवर्ड को अलग gpg एन्क्रिप्टेड फ़ाइलों में संग्रहीत करें। उदाहरण के लिए~/.passwd/<accountname>.gpg
2) अपने चयन के नाम के साथ एक अजगर विस्तार फ़ाइल बनाएँ (उदाहरण के लिए, ~/.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 ""
3) अपने .offlineimaprc फ़ाइल को संशोधित करके अजगर फाइल के बारे में बताएं, और यह बताएं कि अपने पासवर्ड को कैसे पढ़ें
[general]
pythonfile = ~/.offlineimap.py
# ...
[Repository <reponame>]
# add this line for each remote repository
remotepasseval = mailpasswd("<accountname>")
यदि आपके पास कई खाते हैं जो एक साथ (अलग-अलग थ्रेड) चेक किए जाते हैं, और आप gpg- एजेंट का उपयोग करते हैं, तो यह आपसे प्रत्येक खाते के लिए पासफ़्रेज़ मांगेगा। मैं एक फ़ाइल ( echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg
) बनाकर एजेंट को प्राइम करता हूं , और ऑफलाइन फाइल के लॉन्च पर इस फाइल को डिक्रिप्ट करके 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()