6

我正在尝试设置一个applescript,对我的gmail帐户执行(通过python imaplib ...)某些操作(在Mail.app中没有配置IMAP,只有POP)。

为此,脚本需要使用我的密码登录。如果不是出于安全考虑,我可以简单地将我的密码硬编码到 python 脚本中......

有没有一种方法可以让 Mail.app 内部触发的这样一个 applescript(例如通过规则)可以使用我存储在钥匙串中的密码?

4

4 回答 4

7

以下是从我的脚本库中的脚本中复制出来的...

-- 如果您需要在脚本中使用密码,您可以使用钥匙串来存储密码并让脚本检索它。这样您的密码就会受到保护,因为您不需要在脚本中以明文形式存储密码。

-- 创建密码项- 打开 Keychain Access 应用程序并选择左侧栏中的钥匙串。然后单击文件>新密码项...,为其命名,将您的帐户短名称输入帐户,然后输入密码。在密码列表中突出显示它并获取有关它的信息。在 Attributes 按钮下输入它的种类作为通用键。之所以选择它,是因为它们的数量不多,而且搜索速度要快得多。

-- 注意:在 10.7 中,苹果删除了钥匙串脚本,因此我们现在使用安全命令行工具

getPW("name of keychain item")

on getPW(keychainItemName)
    do shell script "security 2>&1 >/dev/null find-generic-password -gl " & quoted form of keychainItemName & " | awk '{print $2}'"
    return (text 2 thru -2 of result)
end getPW
于 2012-05-13T20:33:16.427 回答
2

有这样一种方法,称为Keychain Access Scripting,Apple 在 OS X 10.7 中弃用了它,从 AppleScript 中删除了必要的扩展。但是,您可以使用TextMate 博客上详述security的shell 实用程序(请务必阅读评论——其中有一些问题),或者,我建议您使用第三方替代 Apple 的组件, Daniel Jalkut 出色的可用钥匙串脚本应用程序。安装后,AppleScript 的以下部分将检索您的密码(假设帐户名称为“GMail”):

tell application "Usable Keychain Scripting" to get password of first generic item of current keychain whose account is "GMail"
于 2012-05-13T20:40:03.343 回答
0

我用这个

# Replace %ACCOUNT_NAME% with account name of Keychain item
get_pw () {
  security 2>&1 >/dev/null find-generic-password -ga "%ACCOUNT_NAME%" \
  | sed 's/password: "\(.*\)"/\1/'
}
PASS=$(get_pw)
于 2014-10-16T16:22:03.193 回答
0

一个更新的答案,因为我认为这是以前不可用的。security现在有一个-w选项,只输出密码而不需要解析输出。

这在 python 中为我们提供了这个解决方案:

pw = subprocess.check_output(["security", "find-generic-password", "-wl", "MY_KEYCHAIN_ID"])

这仍然会触发输入用户密码的提示,与其他解决方案相同。

于 2020-04-14T13:34:33.797 回答