You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么SSH使用任意甚至不存在的私钥都可连接服务器?如何清除缓存?

SSH任意指定私钥仍可连接问题解答

原因说明

你遇到的情况确实是SSH私钥缓存导致的,默认大多数操作系统会自动运行ssh-agent进程用于缓存已解锁的私钥凭证:

  • 当你第一次使用正确私钥完成身份验证后,对应私钥的解锁状态会被保存在ssh-agent的会话缓存中
  • 后续发起SSH连接时,客户端会优先尝试使用ssh-agent中已缓存的有效私钥完成认证,优先级高于你通过-i参数指定的私钥文件,因此哪怕指定的文件不存在,只要缓存中存在匹配的有效私钥就可以正常连接。

验证方法

你可以通过添加-v参数打印SSH调试日志确认该逻辑:

ssh -v -i /anything meliwex@server_ip

如果日志中存在Offering public key from agent类的输出,即可确认当前使用的是agent缓存的私钥。

连接示意图

解决方案

1. 清除当前ssh-agent的所有缓存私钥

执行以下命令即可删除agent中所有已缓存的私钥凭证:

ssh-add -D

执行完成后再发起连接,就会读取你通过-i指定的私钥文件,若指定文件不存在或无效会直接认证失败。

2. 单次连接禁用缓存私钥

如果不需要清除所有缓存,仅想让当前连接强制使用你指定的私钥,可以添加IdentitiesOnly=yes参数:

ssh -o IdentitiesOnly=yes -i /path/to/actual/private_key meliwex@server_ip

该参数会告知SSH客户端仅使用命令行显式指定的私钥进行认证,不会读取ssh-agent的缓存内容。

内容的提问来源于stack exchange,提问作者Hayk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:15:10