linux不加载ssh私钥,私钥静默存于磁盘;实际“已加载”指ssh-agent托管的密钥,可用ssh-add -l查看,若未运行则需eval $(ssh-agent)启动并ssh-add添加。

Linux 本身不“加载”SSH密钥——私钥始终静默存于磁盘,只有当你发起 SSH 连接、且客户端决定使用某把私钥时,它才被读取并用于签名。因此,没有系统级的“已加载密钥列表”,但你可以查看当前 ssh-agent 托管的私钥(即已被添加进代理、可被自动使用的密钥)。
检查 ssh-agent 中已添加的密钥
这是最贴近“已加载”含义的操作:
- 确认 ssh-agent 正在运行:
echo $SSH_AGENT_PID或pgrep -u $USER ssh-agent - 列出 agent 中已添加的私钥:
ssh-add -l
输出类似:2048 SHA256:abc123... /home/user/.ssh/id_rsa (RSA) - 若提示 “Could not open a connection to your authentication agent”,先启动并关联:
eval $(ssh-agent),再用ssh-add ~/.ssh/your_key添加
查看本地所有常见私钥文件(未加载但存在)
这帮你快速定位可能被使用的密钥位置:
- 普通用户:
ls -l ~/.ssh/id_*(通常含id_rsa、id_ed25519等) - root 用户:
sudo ls -l /root/.ssh/id_* - 注意:
id_rsa.pub是公钥,不是私钥;私钥文件一般无后缀或带.pem(如 AWS 密钥),但.pub文件不可用于认证
确认当前连接实际用了哪把密钥
连接时加 -v 参数可看到详细协商过程:
-
ssh -v user@host 2>&1 | grep 'Offering'
会显示类似:debug1: Offering RSA public key: /home/user/.ssh/id_rsa - 说明本次连接尝试使用了该路径下的私钥(是否成功取决于服务端是否接受其对应公钥)
补充:如何知道哪些密钥被信任(服务端视角)
这不是“已加载”,但常被混淆——指你曾连过的主机密钥是否记在 known_hosts 中:
- 查某个主机是否已有记录:
ssh-keygen -F example.com(有输出即存在) - 列出所有已知主机条目:
ssh-keygen -F '*'(仅显示匹配行,非完整列表) - 注意:这和“你本地有哪些私钥”完全无关,只关乎你信任过哪些远程主机











