删除id_rsa及id_rsa.pub后仍可连接SSH服务器的配置咨询
问题根因
你遇到的现象是OpenSSH客户端的默认认证逻辑导致的:未做特殊配置时,客户端除了尝试~/.ssh/路径下的各类默认密钥文件(id_rsa、id_ecdsa、id_ed25519等),还会主动读取ssh-agent中缓存的所有私钥完成认证,日志里显示的user_name@user_notebook就是缓存在agent内存中的私钥,和你删除的本地id_rsa文件无关,所以哪怕删了本地密钥文件依然能正常连接。
配置方法(强制仅使用~/.ssh/id_rsa作为唯一RSA认证密钥)
按以下步骤操作即可:
- 第一步:清空ssh-agent中已缓存的私钥
先执行命令查看当前agent内存储的密钥列表,确认异常密钥条目:ssh-add -l
执行命令清空agent内所有缓存密钥:ssh-add -D
如果不想清空全部缓存,也可以通过ssh-add -d 密钥文件路径单独删除user_name@user_notebook对应的私钥条目。 - 第二步:修改用户级SSH客户端配置
编辑当前用户的SSH配置文件~/.ssh/config(文件不存在则直接新建),添加如下配置:# 全局生效配置,若要仅对指定服务器生效,将*替换为对应服务器IP/别名 Host * # 强制仅使用配置中明确指定的密钥做认证,禁止自动尝试其他密钥 IdentitiesOnly yes # 指定唯一的RSA密钥路径 IdentityFile ~/.ssh/id_rsa # 完全禁用ssh-agent交互,彻底避免缓存密钥被调用(不需要agent功能时建议开启) IdentityAgent none - 第三步:验证配置生效
连接目标服务器时增加verbose参数查看认证日志:ssh -v 目标服务器地址
日志中只会出现尝试加载~/.ssh/id_rsa的记录,不会再出现调用user_name@user_notebook密钥的条目;此时删除~/.ssh/id_rsa文件再连接会直接提示权限拒绝,符合预期。
注意:如果配置后仍有异常,检查系统级SSH配置文件
/etc/ssh/ssh_config中是否存在额外的IdentityFile、IdentityAgent相关配置,用户级~/.ssh/config的配置优先级高于系统级配置,正常会直接覆盖系统级规则。
内容的提问来源于stack exchange,提问作者edd
相关产品推荐
相关产品推荐

