使用本地 SSH Key 登录 GCP Compute Engine 实例
摘要助手
切换
SummaryGPT
AI 初始化中...
介绍自己 🙈
生成摘要 👋
推荐文章 📖
前往主页 🏠
前往订阅 💥
前往评论 💬
Kokoro TTS 🎙️
👀 部署教程
使用本地 SSH Key 登录 GCP Compute Engine 实例
dong4j前言
因为现在的机场都不太稳定,而且还有 IP 污染这个坑,最近我在用 Claude Code 和 Codex 的时候总觉得有封号风险。折腾来折腾去,我索性在 GCP 买了一台虚拟机,准备自己搭个节点玩玩儿。
这篇记录就是我在 macOS 上配置 GCP 实例 SSH 登录时走的一遍完整流程,目标很简单:不依赖临时密钥,直接用本地固定私钥登录 Compute Engine。
为了方便后面复用,我把关键命令和排查点都整理到一篇里,照着走基本可以一次打通。
环境信息
| 项目 | 值 |
|---|---|
| GCP Project ID | <your-gcp-project-id> |
| Zone | us-west1-b |
| Instance Name | <your-instance-name> |
| External IP | <your-instance-external-ip> |
| 本地公钥 | ~/.ssh/dev/gcp.pub |
| 本地私钥 | ~/.ssh/dev/gcp |
| Google 账号 | <your-google-account-email> |
| OS Login 用户名 | <your-os-login-username> |
安装并初始化 gcloud
1) 安装 Google Cloud CLI
1 | brew install --cask google-cloud-sdk |
安装后检查版本:
1 | gcloud --version |
如果提示找不到 gcloud,先重新加载 shell 配置:
1 | source ~/.zshrc |
还不行的话,手动加载 SDK 路径:
1 | source "$(brew --prefix)/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc" |
2) 初始化 gcloud
1 | gcloud init |
初始化时我选择了已有项目:
1 | Pick cloud project to use: |
也可以手动设置默认项目和区域:
1 | gcloud config set project <your-gcp-project-id> |
配置 OS Login 与密钥
1) 添加本地 SSH 公钥到 OS Login
1 | gcloud compute os-login ssh-keys add \ |
成功后会看到类似输出:
1 | loginProfile: |
这里最关键的是 username,后面 SSH 登录时要用它作为 Linux 用户名。
2) 查看实例信息
1 | gcloud compute instances list |
示例输出:
1 | NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS |
开启 OS Login 并授权 IAM
1) 检查实例 metadata
1 | gcloud compute instances describe <your-instance-name> \ |
如果只看到 ssh-keys,但没有 enable-oslogin=TRUE,就需要开启 OS Login。
2) 为项目启用 OS Login
1 | gcloud compute project-info add-metadata \ |
检查是否生效:
1 | gcloud compute project-info describe \ |
确认输出里存在:
1 | enable-oslogin: TRUE |
3) 添加 OS Login IAM 权限
普通登录权限:
1 | gcloud projects add-iam-policy-binding <your-gcp-project-id> \ |
需要 sudo 时用管理员权限(我这次用的是这个):
1 | gcloud projects add-iam-policy-binding <your-gcp-project-id> \ |
本地 SSH 配置
编辑 ~/.ssh/config:
1 | vim ~/.ssh/config |
添加以下配置:
1 | Host gcp |
字段说明:
| 配置项 | 说明 |
|---|---|
Host gcp | 本地 SSH 别名 |
HostName | GCP 实例外网 IP |
User | OS Login 返回的 Linux 用户名 |
Port | SSH 端口,默认 22 |
IdentityFile | 本地私钥路径 |
IdentitiesOnly yes | 强制只使用指定私钥 |
PreferredAuthentications publickey | 优先公钥认证 |
私钥权限建议一起收紧:
1 | chmod 700 ~/.ssh |
登录与验证
直接登录:
1 | ssh gcp |
等价命令:
1 | ssh -i ~/.ssh/dev/gcp \ |
登录后验证当前用户:
1 | whoami |
预期输出:
1 | <your-os-login-username> |
如果想做对照测试,也可以先用:
1 | gcloud compute ssh <your-instance-name> \ |
常见报错排查
Permission denied (publickey)
错误示例:
1 | <your-os-login-username>@<your-instance-external-ip>: Permission denied (publickey). |
按这个顺序检查最省时间:
确认私钥公钥是一对:
1
ssh-keygen -y -f ~/.ssh/dev/gcp
确认 SSH 真的用了目标私钥:
1
ssh -vvv gcp
日志里应出现:
1
Offering public key: ~/.ssh/dev/gcp
确认 OS Login 已开启:
1
2
3gcloud compute project-info describe \
--project=<your-gcp-project-id> \
--format="flattened(commonInstanceMetadata.items[])"确认 IAM 角色已授予:
1
2
3
4gcloud projects get-iam-policy <your-gcp-project-id> \
--flatten="bindings[].members" \
--filter="bindings.members:user:<your-google-account-email>" \
--format="table(bindings.role)"至少应包含其一:
1
2roles/compute.osLogin
roles/compute.osAdminLogin
命令汇总
1 | # 1. 安装 Google Cloud CLI |
排查费用组合
1 | echo "== Project Billing ==" |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果























