SSH 密钥缓存管理:ssh‑add 命令完整详解(ssh‑agent 密钥加载实战)
Linux 学习资料 https://pan.baidu.com/s/1A6qqBk2ViE_Le2cQjSowkQ?pwd=7uz8
1. 命令简介
ssh-add 是一个用于管理 SSH 密钥缓存的命令行工具。它的主要功能是将用户的 SSH 私钥添加到 ssh-agent 守护进程的内存缓存中。ssh-agent 是一个在后台运行的程序,用于存储解密的私钥,这样用户在使用 SSH 连接时无需每次都输入密钥的密码短语,从而简化并加速认证流程。
核心作用:将解密的私钥加载到内存中,供 ssh-agent 管理,实现 SSH 会话的免密码短语认证。
2. 语法格式
基本语法:
bash
运行
ssh-add [选项] [文件...]详细语法:
bash
运行
ssh-add [-cDdKkLlXx] [-E 指纹哈希算法] [-t 有效期] [文件...]PKCS#11 相关语法:
bash
运行
ssh-add -s pkcs11_provider_library ssh-add -e pkcs11_provider_library参数说明:
[文件...]:指定要加载的私钥文件路径。如果不指定文件,默认会尝试加载~/.ssh 目录下的所有标准私钥文件(如 id_rsa, id_ecdsa, id_ed25519, id_dsa)。
3. 常用选项及说明
表格
| 选项 | 说明 |
|---|---|
| -l | 列出指纹。显示 ssh-agent 缓存中所有私钥对应的公钥指纹(默认使用 SHA256 哈希)。这是最常用的查看缓存密钥的命令。 |
| -L | 列出公钥。显示 ssh-agent 缓存中所有私钥对应的完整公钥内容。 |
| -d | 删除指定密钥。从 ssh-agent 缓存中移除指定的私钥文件。 |
| -D | 删除所有密钥。清空 ssh-agent 缓存中的所有密钥。 |
| -x | 锁定代理。使用密码对 ssh-agent 进行加密锁定,锁定后任何操作(如添加密钥、建立连接)都需要先解锁。 |
| -X | 解锁代理。输入密码,解锁被 -x 选项锁定的 ssh-agent。 |
| -t | 设置超时时间。为添加的密钥设置一个缓存有效期。超过此时间后,密钥会自动从代理中移除。时间格式可以是秒数,或如 2h30m 的时间字符串。 |
| -c | 要求确认。添加密钥时,设置每次使用该密钥进行认证前,都需要通过一个外部程序(如弹窗)进行用户确认。 |
| -E | 指定指纹哈希算法。与 -l 选项一起使用,指定显示指纹时使用的哈希算法,如 md5 或 sha256。例如:ssh-add -l -E md5。 |
| -K | 加载密钥到钥匙串 (macOS)。在 macOS 上,此选项会将密钥的密码短语同时存储到用户的钥匙串中,实现系统重启后仍能自动加载。 |
| -s | 添加 PKCS#11 共享库提供的密钥。添加来自 PKCS#11 硬件令牌(如智能卡)的密钥。 |
| -e | 删除 PKCS#11 共享库提供的密钥。从代理中移除来自指定 PKCS#11 库的密钥。 |
4. 示例用法
示例 1:添加默认密钥
添加~/.ssh 目录下所有默认的私钥(如 id_rsa, id_ed25519)。系统会提示你输入每个密钥的密码短语。
bash
运行
ssh-add示例 2:添加特定密钥文件
添加指定的私钥文件~/.ssh/my_private_key。
bash
运行
ssh-add ~/.ssh/my_private_key示例 3:查看已缓存的密钥
列出当前 ssh-agent 中所有密钥的指纹(最常用)。
bash
运行
ssh-add -l以 MD5 格式(较旧格式)显示指纹:
bash
运行
ssh-add -l -E md5列出完整的公钥内容:
bash
运行
ssh-add -L示例 4:删除密钥
从缓存中删除特定的密钥文件。
bash
运行
ssh-add -d ~/.ssh/id_rsa_old清空 ssh-agent 中的所有密钥。
bash
运行
ssh-add -D示例 5:设置密钥有效期
添加一个密钥,并设置其在缓存中保留 2 小时。
bash
运行
ssh-add -t 2h ~/.ssh/id_ecdsa示例 6:锁定与解锁代理
使用密码锁定你的 ssh-agent,防止他人使用。
bash
运行
ssh-add -x解锁被锁定的 ssh-agent。
bash
运行
ssh-add -X5. 注意事项
ssh-agent 进程必须运行:ssh-add 命令本身不启动 ssh-agent。通常 ssh-agent 会在图形化登录会话或终端初始化脚本中自动启动。你可以通过 eval "$(ssh-agent -s)" 来手动启动它。 缓存位于内存中:添加的密钥存储在 ssh-agent 进程的内存空间。这意味着: 重启或注销后失效:系统重启或用户注销后,缓存会被清空,需要重新添加密钥。 安全性:相比将未加密的私钥存储在磁盘上,这种方式更安全,因为内存中的密钥更难被非法提取。 默认密钥路径:不带参数执行 ssh-add 时,它只会尝试加载~/.ssh 目录下默认命名的私钥(如 id_rsa)。非标准命名的密钥需要使用完整路径指定。 -K 选项的平台特异性:-K 选项主要用于 macOS 系统,用于与钥匙串集成。在 Linux 或其他系统上可能无效或行为不同。 调试:如果遇到问题,可以添加 -v(详细)选项来获取更多输出信息,帮助诊断。 环境变量:ssh-add 通过环境变量 SSH_AUTH_SOCK 来定位 ssh-agent 的通信套接字。确保此变量已正确设置。
