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)#

必须在你面前的电脑上允许代理转发请求:

  1. 打开 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 本地 1Password
Match 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,但是没有使用,就直接卸载了。

修改验证步骤#

  1. 重新连入:本地执行 ssh home-m4
  2. 检查变量: Terminal window
Terminal window
echo $SSH_AUTH_SOCK
# 应输出 /tmp/ssh-XXXX/agent.XXXX,而非 1Password 路径
  1. 测试密钥: Terminal window
Terminal window
ssh-add -l
# 应能直接列出你本地电脑中的密钥指纹
  1. 最终测试:执行 ssh xxxxx。此时弹窗会出现在本地电脑上,验证通过后远程连接瞬间成功。

注意事项#

  • 环境变量优先级:Shell 脚本中的 export 优先级极高,务必检查是否被 op 插件硬编码。
  • 服务端设置:若变量仍为空,请确认远程机 /etc/ssh/sshd_configAllowAgentForwardingyes
  • 安全性:代理转发仅建议在受信任的服务器之间使用。

总结#

解决弹窗问题的核心在于环境变量分流:远程登录时保护 SSH 转发路径,本地操作时回归 1Password 路径。通过 Match 指令与 Shell 条件判断,可以完美兼容 1Password 与远程开发流。

参考资料#

解决 1Password SSH Agent 在远程 Mac 上的权限弹窗卡死问题
https://www.jianyun.run/posts/mac-ssh-1password/
作者
唐长老日志
发布于
2026-01-06
许可协议
CC BY-NC-SA 4.0