macOS Sonoma下通过SSH访问钥匙串证书问题求助
解决macOS Sonoma SSH会话无法访问登录钥匙串的问题
核心原因
macOS Sonoma 强化了钥匙串访问控制策略,SSH远程会话默认不被授予登录钥匙串的访问权限,即便手动解锁也仅对当前会话生效,这是系统安全规则变更导致的兼容性问题。
解决方案
1. 为SSH进程授予钥匙串访问权限
- 打开「钥匙串访问」应用,选中「登录」钥匙串
- 右键点击「登录」钥匙串,选择「显示简介」
- 切换到「访问控制」标签页,点击左下角锁图标解锁并输入密码
- 在「允许控制此钥匙串的应用」列表中,点击「+」按钮,添加
/usr/bin/ssh进程(若使用第三方OpenSSH,需添加对应路径如/usr/local/bin/ssh) - 若添加单个进程无效,可临时勾选「允许所有应用访问此钥匙串」测试,确认生效后再缩小权限范围
- 重新锁定钥匙串并退出「钥匙串访问」
2. 配置SSH会话自动保持钥匙串解锁状态
如果权限设置后仍有问题,可通过SSH配置实现自动解锁:
- 在用户目录下创建或编辑
.ssh/rc文件,添加以下内容:
注意:直接明文写密码有安全风险,建议通过密钥管理工具或从无交互钥匙串中读取密码(需提前配置)。# 自动解锁登录钥匙串 security unlock-keychain -p "$YOUR_PASSWORD" "/Users/$USER/Library/Keychains/login.keychain-db" # 设置钥匙串超时为8小时(可按需调整时长,单位:秒) security set-keychain-settings -t 28800 -l "/Users/$USER/Library/Keychains/login.keychain-db"
3. 修复codesign权限报错
针对errSecInternalComponent错误,需给codesign授予证书访问权限:
- 在「钥匙串访问」中找到对应的代码签名证书,右键选择「显示简介」
- 切换到「访问控制」标签页,添加
/usr/bin/codesign进程到允许列表 - 若仍无效,可临时勾选「允许所有应用访问此项目」测试,后续再收紧权限
4. 使用独立测试钥匙串替代登录钥匙串
若不想修改登录钥匙串权限,可创建专用测试钥匙串:
- 打开「钥匙串访问」,点击「文件」>「新建钥匙串」,命名为
test.keychain-db并设置密码 - 将测试所需证书导入该新钥匙串
- 在SSH会话中设置环境变量指定使用此钥匙串:
export KEYCHAIN=/Users/$USER/Library/Keychains/test.keychain-db security unlock-keychain -p "$TEST_KEYCHAIN_PASSWORD" $KEYCHAIN export CODESIGN_KEYCHAIN=$KEYCHAIN
验证方法
重新SSH连接Mac后,执行以下命令确认修复效果:
security list-keychains # 确认目标钥匙串已加载 codesign -v /path/to/your/test/app # 测试代码签名是否正常
内容的提问来源于stack exchange,提问作者muhammetkiran
相关产品推荐
相关产品推荐

