三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

SSH 密钥缓存管理:ssh‑add 命令完整详解(ssh‑agent 密钥加载实战)

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 -X

5. 注意事项

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 的通信套接字。确保此变量已正确设置。

← 返回列表