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

替换EC2实例authorized_keys公钥后仍可通过旧密钥访问的问题

解决替换EC2实例authorized_keys后旧密钥仍可登录的问题
  • 关闭SSH连接复用会话
    若之前开启了SSH连接复用(比如本地~/.ssh/config里配置了ControlMaster yes),已建立的连接会保持活跃状态,即使服务器端替换了密钥,复用的旧连接依然能正常访问。执行以下命令关闭复用连接:

    ssh -O exit user@your-ec2-instance-ip
    

    或者直接退出所有当前登录的SSH会话,再尝试用旧密钥登录验证是否失效。

  • 修正authorized_keys文件权限
    sshd对密钥文件的权限要求严格,权限过松会导致sshd忽略该文件,继续使用缓存的认证信息。执行以下命令修复权限:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

    同时确认你修改的是当前登录用户的对应文件——比如用root登录时,路径是/root/.ssh/authorized_keys,而非普通用户的/home/xxx/.ssh/authorized_keys。

  • 确认sshd读取的密钥文件路径
    部分系统会修改sshd配置中的AuthorizedKeysFile参数,导致sshd读取的不是你修改的文件。执行以下命令查看实际生效的路径:

    sudo sshd -T | grep authorizedkeysfile
    

    如果输出路径与你修改的文件不符,找到对应文件并替换其中的旧密钥。

  • 检查额外的授权密钥文件
    有些系统会在/etc/ssh/authorized_keys.d/目录下存放额外的授权密钥,或者sshd配置中指定了多个密钥文件路径。检查这些位置是否残留旧密钥:

    sudo ls /etc/ssh/authorized_keys.d/
    

    若存在相关文件,打开删除其中的旧公钥即可。

  • 使用正确的命令重启sshd服务
    不同系统的sshd重启命令不同,确保执行的是对应系统的正确命令:

    • 基于systemd的系统(如Amazon Linux 2、Ubuntu 16.04+):
      sudo systemctl restart sshd
      
    • 基于init的系统:
      sudo service sshd restart
      

    重启后可通过sudo systemctl status sshd(systemd)或sudo service sshd status(init)确认服务已正常重启。

  • 清理本地SSH-agent缓存
    虽然服务器端已替换密钥,但本地SSH-agent可能缓存了旧私钥(这种情况服务器本应拒绝登录,但可排查尝试)。执行以下命令清空缓存:

    ssh-add -D
    

    之后仅添加新私钥:

    ssh-add ~/.ssh/new_private_key_file
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:23