Google VM中已授权SSH密钥莫名消失?如何阻止该问题发生?
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,添加或修改:
重启sshd生效:AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys.d/*systemctl restart sshd
4. 排查其他进程对文件的修改
- 使用
auditd监控文件操作:
Debian/Ubuntu安装auditd:
CentOS/RHEL安装auditd:apt install -y auditd
添加监控规则:yum install -y auditd
查看操作日志:auditctl -w ~/.ssh/authorized_keys -p wa -k ssh-keys-monitor
日志会显示修改该文件的进程ID和命令,定位异常进程。ausearch -k ssh-keys-monitor - 检查定时任务:
查看当前用户定时任务:
查看系统级定时任务:crontab -l
确认是否有脚本自动删除或修改ls /etc/cron* /var/spool/cron/authorized_keys。
内容的提问来源于stack exchange,提问作者neutron02
相关产品推荐
相关产品推荐

