在 Mac 上,打开终端并运行 ssh-add -l。这将列出通过连接到该终端会话的 SSH agent 可用的身份指纹和注释;它不会输出私钥内容。如果 agent 中没有身份,该命令会对此进行报告。请将此视为对当前 agent 连接的检查,而非 Mac 上存储的所有密钥的完整清单。
列出当前 agent 中的身份
在终端中输入:
ssh-add -l
-l 选项会列出 agent 所代表的身份的指纹。OpenSSH 的默认指纹格式为 SHA-256。每个结果通常包含密钥大小、指纹、密钥注释和算法;注释可能有助于识别密钥,但它是用户提供的文本,并不能证明哪个账户或服务器会接受它。OpenSSH ssh-add(1) 手册
该命令仅请求列表,不会添加或移除身份。检查时请避免使用 ssh-add -D 和 ssh-add -d:这些选项会移除身份。如果你的目标是尽可能少地透露信息,也请避免使用 ssh-add -L。该选项会打印 agent 中身份的公钥参数。公钥虽然不是私钥,但比指纹包含更多身份识别信息。OpenSSH ssh-add(1) 手册
理解空列表或连接错误
如果输出显示 agent 没有身份,则表示该终端连接到的 agent 没有可报告的内容。这并不能证明你的磁盘、硬件身份验证器或其他地方没有 SSH 密钥。它也不能证明其他应用程序或终端窗口使用的是同一个 agent。OpenSSH 依靠 SSH_AUTH_SOCK 环境变量来定位 agent,因此不同会话的连接方式可能不同。OpenSSH ssh-add(1) 手册
如果相反,你看到诸如“Could not open a connection to your authentication agent”(无法打开与认证代理的连接)之类的错误,则表示当前 shell 无法查询 agent 套接字。该列表并未确认其他会话是否拥有身份。请在你用于 SSH 的终端或 shell 中重新运行 ssh-add -l;不要仅仅为了检查而启动一个新的 agent,因为这可能会为该 shell 提供另一个空的 agent。如果命令仍然失败,请使用 printf '%s\n' "$SSH_AUTH_SOCK" 检查环境是否配置为提供 SSH_AUTH_SOCK。这将显示套接字路径,而不是密钥,但它本身并不能验证套接字是否可用。
区分 agent 与 macOS 钥匙串
加载在 agent 中的 SSH 身份与存储在钥匙串中的密码短语是两码事。Apple 将 UseKeychain 记录为用于存储密钥密码短语的 SSH 配置选项,并将 AddKeysToAgent 记录为在 SSH 使用密钥时将其加载到 agent 中的选项。因此,钥匙串中的密码短语本身并不意味着该身份当前会出现在 ssh-add -l 中;身份可能会在稍后添加到 agent 中,例如在 SSH 连接期间。Apple 技术说明 TN2449
如果你需要检查钥匙串项目,“钥匙串访问”可以显示存储在所选钥匙串中的密钥和证书的信息。这是与列出活动 agent 不同的独立检查,不应用于推断当前终端可以提供哪些身份。Apple 支持:在 Mac 上的“钥匙串访问”中查看存储的信息
此项检查能告诉你什么
当你需要了解此终端会话的 agent 可用身份的低公开度快照时,请使用 ssh-add -l。如果需要确认特定密钥,请将指纹与受信任的记录进行比对。该列表不会显示私钥内容、识别计算机上的每个密钥、确认远程服务器是否授权了某个密钥,也不会保证后续的 SSH 命令一定会使用列出的身份;SSH 配置和连接上下文也会影响身份验证。
来源
ssh-add(1) - OpenBSD 手册页 — OpenBSD
技术说明 TN2449:macOS 10.12.2 中的 OpenSSH 更新 — Apple Developer
在 Mac 上的“钥匙串访问”中查看存储的信息 — Apple 支持