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

如何解决Gcloud compute ssh报错:无可用支持身份验证方法(server sent: publickey)

解决方案

错误原因

你遇到的报错由两个问题叠加导致:

  1. 主机密钥冲突:你本地PuTTY缓存了之前连接相同主机名/IP时的SSH主机密钥,现在新的虚拟机密钥和旧缓存不匹配,触发了安全告警
  2. 认证失败:交互提示弹出后你没有及时输入确认指令,连接直接中断,导致后续公钥认证流程无法正常完成

手动修复方法

  • 清理PuTTY旧缓存:按下Win+R输入regedit打开注册表,定位到路径HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys,找到对应backend-lab1主机的IP/域名条目,右键删除即可
  • 首次手动执行gcloud compute ssh backend-lab1 --zone=europe-west1-b,弹出提示时选择yes,后续运行脚本就不会再弹出交互窗口

代码自动处理方案(无需手动确认)

给gcloud compute ssh命令添加跳过主机密钥校验、禁用交互提示的参数,即可实现自动确认yes,修改后的参考代码如下:

print('ssh back-end begin')
host = "backend-lab1"

# 新增参数跳过主机密钥检查,自动接受新密钥,关闭所有交互提示
cmd= f'gcloud compute ssh {host} --force-key-file-overwrite --strict-host-key-checking=no --ssh-flag="-batch"'
res = subprocess.check_output(cmd, shell=True)

cmd = f'gcloud compute ssh {host} --zone=europe-west1-b --strict-host-key-checking=no --ssh-flag="-batch" --command="cd /home/jeromevialhes/mse-tsm-cloudsys-lab1/app/ && sudo echo \'DATABASE_HOST=http://{ip_db}:3000\' | sudo tee /home/jeromevialhes/mse-tsm-cloudsys-lab1/app/.env && sudo echo \'DATABASE_USER=postgres\' | sudo tee -a /home/jeromevialhes/mse-tsm-cloudsys-lab1/app/.env && sudo echo \'DATABASE_PASS=postgres\' | sudo tee -a /home/jeromevialhes/mse-tsm-cloudsys-lab1/app/.env && sudo echo \'DATABASE_NAME=counter\' | sudo tee -a /home/jeromevialhes/mse-tsm-cloudsys-lab1/app/.env && sudo npm install pm2 -g &&  pm2 --name counter-api start npm -- start"'
print(cmd)
res = subprocess.check_output(cmd, shell=True)
print(res)
print('ssh back-end end')

补充说明

  • 如果你是在Linux/macOS环境下运行脚本,将--ssh-flag="-batch"替换为--ssh-flag="-o StrictHostKeyChecking=accept-new"即可,效果一致
  • 上述参数也可以直接添加到前端虚拟机的连接代码中,所有gcloud ssh操作都无需手动确认
  • 你的后端配置代码里重复写入了两次DATABASE_USER=postgres,可以删除其中一行减少冗余操作

内容的提问来源于stack exchange,提问作者J.erome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:45:00