639 字
3 分钟
解决 1Password SSH Agent 在远程 Mac 上的权限弹窗卡死问题
前言
当本地 MacBook 和远程 Mac mini 都安装了 1Password SSH Agent 时,从本地通过 SSH 连接到远程并执行需要密钥的操作(如 git push),会遇到一个棘手问题:1Password 的授权弹窗会在远程 Mac mini 的桌面上弹出,而你人在本地无法看到和操作这个弹窗,导致 SSH 会话卡死无响应。本文介绍如何通过 SSH Agent 转发与环境变量配置,实现”在远程执行操作,授权弹窗在本地出现”。
环境情况
- 本地端:MacBook (肉身所在设备)
- 远程端:Mac mini (如 M4,开启了 1Password SSH Agent)
- 软件:1Password 8.10+
解决过程
第一步:本地端准备 (Local PC)
必须在你面前的电脑上允许代理转发请求:
- 打开 1Password -> 设置 -> 开发者 -> SSH Agent。
修改本地 ~/.ssh/config,针对远程机开启转发:
Host home-m4 HostName <Mac-Mini-IP> User <username> ForwardAgent yes或者使用 ssh -A home-m4 开启代理转发
第二步:远程端配置 (Mac mini)
1. SSH 配置优化
修改远程端的 ~/.ssh/config。使用 Match 块判断会话环境:如果是远程登录($SSH_TTY 有值),则跳过本地 Socket,改用转发过来的 Socket。
# 仅在非远程连接(如 VNC 或物理接触)时使用 Mac 本地 1PasswordMatch host * exec "test -z $SSH_TTY" IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"2. 1Password CLI 导致的变量冲突
如果你在远程机安装了 1Password CLI (op),其自动注入的脚本会强制覆盖 SSH_AUTH_SOCK,导致转发失效。
我安装了1Password CLI,但是没有使用,就直接卸载了。
修改验证步骤
- 重新连入:本地执行
ssh home-m4。 - 检查变量: Terminal window
echo $SSH_AUTH_SOCK# 应输出 /tmp/ssh-XXXX/agent.XXXX,而非 1Password 路径- 测试密钥: Terminal window
ssh-add -l# 应能直接列出你本地电脑中的密钥指纹- 最终测试:执行
ssh xxxxx。此时弹窗会出现在本地电脑上,验证通过后远程连接瞬间成功。
注意事项
- 环境变量优先级:Shell 脚本中的
export优先级极高,务必检查是否被op插件硬编码。 - 服务端设置:若变量仍为空,请确认远程机
/etc/ssh/sshd_config中AllowAgentForwarding为yes。 - 安全性:代理转发仅建议在受信任的服务器之间使用。
总结
解决弹窗问题的核心在于环境变量分流:远程登录时保护 SSH 转发路径,本地操作时回归 1Password 路径。通过 Match 指令与 Shell 条件判断,可以完美兼容 1Password 与远程开发流。
参考资料
解决 1Password SSH Agent 在远程 Mac 上的权限弹窗卡死问题
https://www.jianyun.run/posts/mac-ssh-1password/