applescript无法直接读取钥匙串明文密码,但可通过do shell script调用security命令添加密码、打开keychain access、模拟safari保存提示等合规操作;需授权完全磁盘访问、辅助功能及钥匙串解锁。
applescript 本身不能直接读取、修改或调用钥匙串(keychain)中已存的密码条目,这是出于系统级安全限制——macos 不允许脚本自动提取明文密码,哪怕你是当前用户。但 applescript 可以间接参与密码管理流程,比如触发保存动作、打开钥匙串访问工具、或配合其他机制实现自动化协同。
AppleScript 能做什么:有限但实用的操作
你无法用 AppleScript 写一行代码就“拿到我的 Gmail 密码”,但可以做这些合规动作:
- 使用 do shell script 调用
security命令行工具,向登录钥匙串中添加新密码项(需用户确认或提前授权); - 通过 tell application "Keychain Access" 打开“钥匙串访问”App,定位到某类条目(如互联网密码),但不能自动双击查看内容;
- 在 Safari 自动填充场景中,AppleScript 可模拟点击“保存密码”提示栏(需辅助功能权限,且 macOS 版本和设置影响成功率);
- 配合“自动操作”(Automator)工作流程,把 AppleScript 作为中间环节,接收上一步的账号信息并写入钥匙串(仍需
security add-internet-password配合)。
真正能写入密码的可靠方式:security 命令 + AppleScript 封装
最常用也最稳妥的方法,是让 AppleScript 调用终端命令 security。例如,保存一个网站密码:
do shell script "security add-internet-password -s example.com -a user@example.com -w 'p@ssw0rd' -T '/Applications/Safari.app'"
- -s 指定域名(service);
- -a 是账户名(account);
- -w 是密码(注意:明文出现在命令中,建议仅用于可信、临时场景);
- -T 指定可访问该密码的应用(如 Safari),避免弹窗询问。
运行前需确保:“钥匙串访问”已解锁,且该钥匙串对 security 工具授权(首次运行通常会弹窗确认)。
绕不开的安全前提:权限与授权
即使脚本语法正确,以下任一缺失都会失败:
- 完全磁盘访问权限:为 Terminal、Script Editor 或 Automator 授予“隐私与安全性 > 完全磁盘访问”;
- 辅助功能权限(如涉及 UI 操作):在“隐私与安全性 > 辅助功能”中添加对应 App;
- 钥匙串解锁状态:脚本执行时,登录钥匙串必须已解锁(即你刚输过登录密码不久,或手动在钥匙串访问中解锁过);
-
iCloud 钥匙串同步关闭时,
security默认只操作本地登录钥匙串;开启后,新增条目会随 iCloud 同步,但脚本不控制同步行为。
替代思路:用 Safari 的原生能力代替脚本取密
与其费力从钥匙串“导出密码”,不如让系统自己完成关键动作:
- 在 Safari 中访问网站并登录后,系统会自动弹出“保存密码”提示——AppleScript 可模拟点击“是”,但依赖辅助功能稳定性和界面元素位置;
- 更推荐做法:保持 iCloud 钥匙串开启,所有设备自动同步;需要密码时,在 Safari 地址栏点钥匙图标,或在“钥匙串访问”里手动搜索查看(支持模糊匹配);
- 若为开发调试用,可临时启用“钥匙串访问”的“显示密码”复选框(需输入登录密码),比写脚本更直接安全。











