如何在Google Compute Engine远程触发命令?SSH公钥权限拒绝排查
我希望通过远程触发Google Compute Engine(GCE)完成业务流程,不想安装gcloud SDK,尝试直接使用SSH命令:
ssh -i ~/.ssh/gcloud_ce <instance_name>@<vm_ext_ip> 'ls'
执行时收到错误提示:Permission denied (public key),需要补充哪些配置才能实现目标?
确认公钥已授权给GCE实例
将本地私钥~/.ssh/gcloud_ce对应的公钥(通常是同目录下的gcloud_ce.pub文件内容),添加到GCE实例的~/.ssh/authorized_keys文件中,或者通过Google Cloud控制台的实例详情页,在「SSH密钥」模块添加该公钥内容。注意公钥格式必须为标准SSH公钥格式(如ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... 备注),不能有多余换行或空格。修正私钥文件权限
SSH对私钥权限要求严格,执行以下命令设置正确权限:chmod 600 ~/.ssh/gcloud_ce chmod 700 ~/.ssh使用正确的SSH登录用户名
GCE实例的默认SSH用户名并非实例名称,而是创建实例时指定的自定义用户名(若未指定,通常为你的Google账号用户名,且默认禁止root远程登录)。可通过GCE控制台的实例连接信息确认正确用户名,替换命令中的<instance_name>。验证公钥匹配性
执行以下命令生成本地私钥对应的公钥,与添加到GCE实例的公钥对比,确保完全一致:ssh-keygen -y -f ~/.ssh/gcloud_ce检查防火墙规则
确保GCE实例所属VPC的防火墙允许端口22(SSH)的入站流量,默认的default-allow-ssh规则通常已启用,若自定义规则需确认本地IP可访问该端口。
内容的提问来源于stack exchange,提问作者BadProgrammer

