必须通过钥匙串访问解锁登录钥匙串并执行终端命令导出:先创建目录,再用security命令提取互联网密码列表,循环导出账号密码到文本文件,最后用awk解析生成CSV;App专用密码需单独用find-generic-password命令导出。

要将Safari浏览器钥匙串中保存的所有网站账号、密码、信用卡和Wi-Fi凭证完整导出为可读文件,必须绕过系统默认不提供批量导出功能的限制,借助钥匙串访问工具配合终端命令提取明文数据。
确认钥匙串访问权限并解锁登录钥匙串
打开“钥匙串访问”应用(路径:/应用程序/实用工具/钥匙串访问.app),在左侧面板确认“登录”钥匙串已选中且图标为解锁状态;若显示上锁图标,双击“登录”→输入系统登录密码→勾选“始终允许”后点击“好”。【未解锁登录钥匙串会导致后续所有导出命令返回空结果】
检查顶部菜单栏“钥匙串访问”→“偏好设置”→“通用”选项卡,确保“新密码项目默认存储于‘登录’钥匙串”已启用。
使用终端命令批量导出网站密码为纯文本文件
打开“终端”应用,逐行执行以下命令:
第一步:创建导出目录并进入
mkdir -p ~/Desktop/SafariPasswords && cd ~/Desktop/SafariPasswords
第二步:获取所有互联网密码条目的名称列表
security find-internet-password -g 2>/dev/null | grep -o '"acct"
第三步:对每个账号名循环导出用户名与密码
while IFS= read -r acct; do
if [ -n "$acct" ]; then
echo "--- $acct ---" >> passwords_export.txt
security find-internet-password -s "$acct" -w 2>/dev/null >> passwords_export.txt 2>/dev/null
echo "" >> passwords_export.txt
fi
done
这一步会生成一个包含全部网站账号和明文密码的passwords_export.txt文件,放在桌面SafariPasswords文件夹内。注意:部分网站(如Google、Microsoft账户)因启用了增强安全策略,其密码可能无法被该命令读取,终端会输出“security: SecKeychainSearchCopyNext: The specified item could not be found.”提示。
导出Wi-Fi密码和App专用密码
方法一:Wi-Fi密码单独提取
运行命令:
networksetup -listallhardwareports | grep -A 1 "Wi-Fi" | grep "device" | cut -d' ' -f2 | xargs -I {} bash -c 'echo "=== $(networksetup -getairportnetwork {} | cut -d" " -f4-) ==="; security find-generic-password -s "AirPortNetworkPassword:$(cat /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist 2>/dev/null | plutil -convert xml1 - -o - 2>/dev/null | grep -A1 "$(networksetup -getairportnetwork {} | cut -d" " -f4-)" -m1 | grep -o 'key="[^"]*"' | cut -d'"' -f2 | head -1)" -w 2>/dev/null'
方法二:App专用密码(如iCloud App密码)导出
执行:
security find-generic-password -s "com.apple.networkextension" -w 2>/dev/null || echo "无可用App专用密码"
这两类凭证不会出现在前序的互联网密码导出结果中,必须用对应命令单独调用。
将导出内容整理为CSV格式供Excel查看
在终端中进入刚才创建的SafariPasswords目录,运行:
awk '/--- .* ---/{title=$2; next} /^$/ && title{print title "," user "," pass; title=""; user=""; pass=""; next} /username:/ && !user{sub(/username:/,"",$0); gsub(/^ +| +$/,"",$0); user=$0; next} /password:/ && !pass{sub(/password:/,"",$0); gsub(/^ +| +$/,"",$0); pass=$0}' passwords_export.txt | sed 's/,$//' > passwords.csv
该命令会解析passwords_export.txt中的结构化文本,按“网站名,用户名,密码”三列生成CSV文件。若某条目缺失用户名或密码字段,对应位置留空——这是正常现象,说明钥匙串中未完整保存该字段。


















