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

Google VM中已授权SSH密钥莫名消失?如何阻止该问题发生?

Google Cloud VM 中 ~/.ssh/authorized_keys 持续消失的排查与修复建议

1. 检查GCP SSH密钥元数据配置

  • 确认实例级与项目级密钥优先级:如果实例元数据中block-project-ssh-keys设为true,实例只会加载自身SSH密钥,项目级密钥不会同步,导致重启后部分密钥缺失。执行命令查看配置:
    gcloud compute instances describe [INSTANCE_NAME] --zone [ZONE]
    
    在输出的metadata字段中查找该参数,若需项目级密钥可将其改为false。
  • 校验元数据密钥格式:每个密钥必须是ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... user@example.com的完整格式,不能有换行、多余空格或无效字符,否则同步时会被过滤。

2. 排查google-ssh-key-daemon服务状态

GCP通过该服务定期从元数据同步密钥到authorized_keys,服务异常会导致文件被错误覆盖或删除:

  • 查看服务运行状态:
    systemctl status google-ssh-key-daemon.service
    
  • 重启服务并设置开机自启:
    systemctl restart google-ssh-key-daemon.service
    systemctl enable google-ssh-key-daemon.service
    
  • 查看服务日志定位异常:
    journalctl -u google-ssh-key-daemon.service
    
    日志中可能显示元数据拉取失败、权限异常等问题。

3. 保留自定义密钥的临时方案

如果需要添加元数据之外的自定义密钥,避免被daemon覆盖:

  • 创建authorized_keys.d目录存放自定义密钥:
    mkdir -p ~/.ssh/authorized_keys.d
    chmod 700 ~/.ssh/authorized_keys.d
    echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..." > ~/.ssh/authorized_keys.d/custom_keys
    chmod 600 ~/.ssh/authorized_keys.d/custom_keys
    
  • 修改sshd配置,让其读取该目录下的密钥文件:
    编辑/etc/ssh/sshd_config,添加或修改:
    AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys.d/*
    
    重启sshd生效:
    systemctl restart sshd
    

4. 排查其他进程对文件的修改

  • 使用auditd监控文件操作:
    Debian/Ubuntu安装auditd:
    apt install -y auditd
    
    CentOS/RHEL安装auditd:
    yum install -y auditd
    
    添加监控规则:
    auditctl -w ~/.ssh/authorized_keys -p wa -k ssh-keys-monitor
    
    查看操作日志:
    ausearch -k ssh-keys-monitor
    
    日志会显示修改该文件的进程ID和命令,定位异常进程。
  • 检查定时任务:
    查看当前用户定时任务:
    crontab -l
    
    查看系统级定时任务:
    ls /etc/cron* /var/spool/cron/
    
    确认是否有脚本自动删除或修改authorized_keys。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:35:49