首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密OfflineIMAP密码

加密OfflineIMAP密码
EN

Unix & Linux用户
提问于 2012-07-29 02:25:48
回答 3查看 17.5K关注 0票数 21

我正在尝试设置OfflineIMAP,以便通过gpg加密文件进行身份验证(这样我就可以将所有加密合并到我的gpg代理进程中)。

从文档中看,加密服务器密码的唯一方法似乎是使用gnome-keyring (我不希望在我的无头服务器上运行它)。有没有办法用你能用的方式从gpg文件中输入我的密码?

我知道您可以通过扩展python文件向offlineimap添加额外的特性,但我恐怕不知道从哪里开始。

EN

回答 3

Unix & Linux用户

发布于 2012-09-16 23:22:18

我使用了以下方法,它运行得相当好:

1)将密码存储在单独的gpg加密文件中。例如,~/.passwd/<accountname>.gpg

2)使用您选择的名称(例如,~/.offlineimap.py)创建一个python扩展名文件,其内容如下:

代码语言:javascript
复制
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文件的信息,并告诉它如何读取密码

代码语言:javascript
复制
[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)来初始化代理,并在启动offlineimap时解密这个文件来启动gpg代理。为此,将以下内容添加到~/.offlineimap.py的末尾:

代码语言:javascript
复制
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()
票数 33
EN

Unix & Linux用户

发布于 2013-03-31 13:23:34

喜欢@kbeta的答案。然而,subprocess.check_output()只是在python2.7中引入的--所以这里有一个offlineimap.py版本,它将适用于较早版本的python:

代码语言:javascript
复制
import os
import subprocess

def mailpasswd(acct):
    acct = os.path.basename(acct)
    path = "/home/hamish/.passwd/%s.gpg" % acct
    args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
    proc = subprocess.Popen(args, stdout=subprocess.PIPE)
    output = proc.communicate()[0].strip()
    retcode = proc.wait()
    if retcode == 0:
        return output
    else:
        return ''
票数 5
EN

Unix & Linux用户

发布于 2020-10-03 17:09:58

ArchLinux wiki有一些好信息

我能够将密码存储到本指南之后的KDE。

~/offlineimaprc

代码语言:javascript
复制
[general]
accounts = main
pythonfile = ~/offlineimap.py

[Account main]
# Identifier for the local repository; e.g. the maildir to be synced via IMAP.
localrepository = main-local
# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.
remoterepository = main-remote

[Repository main-local]
# OfflineIMAP supports Maildir, GmailMaildir, and IMAP for local repositories.
type = Maildir
# Where should the mail be placed?
localfolders = ~/imap-backup

[Repository main-remote]
type = IMAP
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
remotehost = my.host
remoteuser = my.user
remotepasseval = get_password()

~/offlineimap.py

代码语言:javascript
复制
#! /usr/bin/env python2
from subprocess import check_output

def get_password():
    return check_output('qdbus org.kde.kwalletd5 /modules/kwalletd5 readPassword "$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.open kdewallet 0 "kde-service-menu-nowardev-scanner")" "imap" "akonadi_imap_resource_0rc" "kde-service-menu-nowardev-scanner"', shell=True).splitlines()[0]
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/44214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档