我正在尝试设置一个applescript,对我的gmail帐户执行(通过python imaplib ...)某些操作(在Mail.app中没有配置IMAP,只有POP)。
为此,脚本需要使用我的密码登录。如果不是出于安全考虑,我可以简单地将我的密码硬编码到 python 脚本中......
有没有一种方法可以让 Mail.app 内部触发的这样一个 applescript(例如通过规则)可以使用我存储在钥匙串中的密码?
我正在尝试设置一个applescript,对我的gmail帐户执行(通过python imaplib ...)某些操作(在Mail.app中没有配置IMAP,只有POP)。
为此,脚本需要使用我的密码登录。如果不是出于安全考虑,我可以简单地将我的密码硬编码到 python 脚本中......
有没有一种方法可以让 Mail.app 内部触发的这样一个 applescript(例如通过规则)可以使用我存储在钥匙串中的密码?
以下是从我的脚本库中的脚本中复制出来的...
-- 如果您需要在脚本中使用密码,您可以使用钥匙串来存储密码并让脚本检索它。这样您的密码就会受到保护,因为您不需要在脚本中以明文形式存储密码。
-- 创建密码项- 打开 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
有这样一种方法,称为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"
我用这个
# 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)
一个更新的答案,因为我认为这是以前不可用的。security
现在有一个-w
选项,只输出密码而不需要解析输出。
这在 python 中为我们提供了这个解决方案:
pw = subprocess.check_output(["security", "find-generic-password", "-wl", "MY_KEYCHAIN_ID"])
这仍然会触发输入用户密码的提示,与其他解决方案相同。