使用 gcloud CLI 進行 SSH 連線的完整指南

更新日期: 2025 年 3 月 4 日

在使用 Google Cloud Platform (GCP) 管理虛擬機 (VM) 時,SSH 連線是必不可少的技能之一。

gcloud CLI (Command Line Interface) 是 Google 提供的強大工具,不僅能輕鬆管理 GCP 資源,還能快速、安全地透過 SSH 連接至 VM 實例。

本篇文章將一步步介紹如何使用 gcloud CLI 進行 SSH 連線,適合初學者學習與應用。


背景知識

gcloud CLI 是什麼?

gcloud CLI 是 Google Cloud SDK 的一部分,允許你使用終端機指令來管理 GCP 中的各種服務與資源。透過 gcloud CLI,你可以:

  • 建立、管理 VM 實例
  • 部署應用程式
  • 管理儲存空間與網路設定
  • 進行 SSH 連線等操作

什麼是 SSH?

SSH (Secure Shell) 是一種安全的網路通訊協議,通常用於在不安全的網路上安全地連接到遠端伺服器。它提供加密通道,確保數據在傳輸過程中的機密性與完整性。

  • 常見用途: 遠端登入、遠端指令執行、檔案傳輸 (SCP, SFTP)
  • 主要組件: 客戶端 (如 ssh 指令) 和伺服器端 (如 SSH 服務)

連接前的準備工作

安裝 Google Cloud SDK

如果尚未安裝 gcloud CLI,請依以下步驟操作:

# 安裝 gcloud CLI
curl -sSL https://sdk.cloud.google.com | bash

# 重新加載 Shell
exec -l $SHELL

初始化 gcloud CLI

在安裝完成後,進行初始化以設定專案與認證:

gcloud init

確認 SSH 金鑰設置

gcloud CLI 會自動幫你生成 SSH 公私鑰,若無需手動配置,確認金鑰路徑:

ls ~/.ssh/

如果你有自訂金鑰,則可以手動新增金鑰到 GCP:

gcloud compute os-login ssh-keys add --key-file ~/.ssh/id_rsa.pub

使用 gcloud CLI 進行 SSH 連線的方法

基本指令格式

gcloud compute ssh [VM_NAME] --zone=[ZONE]
  • VM_NAME: 你的虛擬機名稱 (例如 my-vm)
  • ZONE: VM 所在的 GCP 區域 (例如 us-central1-a)

實際範例

gcloud compute ssh my-vm --zone=us-central1-a

設置特定使用者進行 SSH 連線

gcloud compute ssh [USER]@[VM_NAME] --zone=[ZONE]

自訂 SSH 選項

gcloud compute ssh my-vm --zone=us-central1-a -- -L 8080:localhost:80
  • -L 8080:localhost:80: 設置 SSH 隧道 (SSH Tunnel),將本機的 8080 端口轉發到遠端伺服器的 80 端口。

gcloud SSH 與一般 SSH 差異比較

一般 SSH 連線的原理

當你使用傳統的 ssh 指令連線到遠端伺服器時,通常會經歷以下步驟:

1️⃣ 產生 SSH 金鑰對 (Public/Private Key Pair)

ssh-keygen -t rsa -f ~/.ssh/id_rsa

2️⃣ 將公鑰手動複製到遠端伺服器

ssh-copy-id user@remote-server

或者手動編輯 .ssh/authorized_keys 文件。

3️⃣ 建立 SSH 連線

ssh user@remote-server

4️⃣ 驗證與連線

  • 客戶端將私鑰進行簽名,並將簽名結果傳送至伺服器。
  • 伺服器使用事先儲存的公鑰驗證簽名是否正確。
  • 驗證通過後建立安全的加密通道。

5️⃣防火牆設定

  • 需手動確認遠端伺服器的防火牆允許 22 端口開放,否則無法連接。
sequenceDiagram
    participant Client as SSH Client
    participant Server as SSH Server
    participant KeyPair as SSH Key Pair

    Client->>Server: 建立 TCP 連線 (Port 22)
    Server->>Client: 提供伺服器公鑰 (Server Public Key)
    
    Note over Client,Server: 設置安全加密通道 (Diffie-Hellman)
    
    Client->>KeyPair: 讀取私鑰 (Private Key)
    Client->>Server: 提供客戶端公鑰 (Client Public Key)
    
    Server->>Server: 驗證客戶端公鑰 (檢查 authorized_keys)
    alt 認證通過
        Server->>Client: 認證成功 (Access Granted)
        Client->>Server: 建立加密數據傳輸通道
        Server->>Client: 安全通信開始
    else 認證失敗
        Server->>Client: 認證失敗 (Access Denied)
    end

gcloud SSH 連線的原理

使用 gcloud compute ssh 指令建立 SSH 連線時,背後執行了許多自動化的操作,步驟如下:

1️⃣ 自動生成或使用現有 SSH 金鑰

  • 當你第一次使用 gcloud compute ssh 指令時,gcloud 會自動檢查你的 ~/.ssh 目錄是否已有可用的 SSH 金鑰。
  • 如果沒有,會自動生成新的 SSH 金鑰對 (id_rsaid_rsa.pub)。

2️⃣ 自動將公鑰上傳到 GCP

  • gcloud 會自動將公鑰上傳到 GCP,並將金鑰寫入 VM 的 ~/.ssh/authorized_keys 中。
  • 這個過程通常透過 metadata (中繼資料) 或 OS Login (作業系統登入) 機制完成,視你設定的認證模式而定。

3️⃣ 防火牆規則自動配置

  • gcloud 會自動確認你的 VM 所在的網路是否允許 SSH (TCP 22 端口) 連線,並在必要時自動設置防火牆規則。

4️⃣ 建立 SSH 連線

  • 最終,gcloud 實際上還是透過傳統的 ssh 指令建立連線,但自動填入所有參數,例如:
ssh -i ~/.ssh/id_rsa [USER]@[VM_EXTERNAL_IP]
  • gcloud 還會自動處理特別的參數,例如代理 (Proxy) 設定、跳板機 (bastion host) 配置等。

5️⃣ 帳號驗證機制 (OS Login vs Metadata)

  • Metadata 方式
    • 將 SSH 公鑰寫入 VM 的中繼資料 (metadata) 中,VM 啟動或重啟時會自動載入金鑰。
  • OS Login 方式
    • 如果啟用了 OS Login 功能,則公鑰會上傳到你的 GCP 帳號,並透過 IAM 權限管理訪問控制。這樣做的好處是可以集中管理 SSH 存取權限。
sequenceDiagram
    participant Client as gcloud CLI (SSH Client)
    participant GCP as Google Cloud Platform
    participant VM as SSH Server
    participant KeyPair as SSH Key Pair
    
    Client->>GCP: gcloud compute ssh my-vm --zone=us-central1-a
    GCP->>Client: 🔄 自動檢查或生成 SSH 金鑰 (Public/Private Key)
    GCP->>VM: 🔄 自動上傳公鑰到 VM (Metadata / OS Login)
    
    Client->>VM: 建立 TCP 連線 (Port 22)
    VM->>Client: 提供伺服器公鑰 (Server Public Key)
    
    Note over Client,VM: 設置安全加密通道 (Diffie-Hellman)
    
    Client->>KeyPair: 讀取私鑰 (Private Key)
    Client->>VM: 提供客戶端公鑰 (Client Public Key)
    
    VM->>VM: 🔄 自動驗證客戶端公鑰 (檢查 authorized_keys / OS Login)
    
    alt 認證通過
        VM->>Client: 認證成功 (Access Granted)
        Client->>VM: 建立加密數據傳輸通道
        VM->>Client: 安全通信開始
    else 認證失敗
        VM->>Client: 認證失敗 (Access Denied)
    end

gcloud SSH 與一般 SSH 差異比較

功能一般 SSH 指令gcloud SSH 指令
金鑰生成與管理手動 (ssh-keygen, ssh-copy-id)自動生成與上傳 (gcloud 內建)
防火牆配置需手動設定安全規則自動配置或提示設定防火牆
使用者驗證依賴 .ssh/authorized_keys支援 OS Login (IAM) 與 Metadata
連線命令ssh user@ip_addressgcloud compute ssh instance
高級功能 (代理、跳板機)需手動配置 (-J, -L 參數)提供簡化參數 (--tunnel-through-iap 等)
安全性與彈性需要自行管理金鑰與權限透過 GCP IAM 政策集中管理

什麼情況下選擇 gcloud CLI SSH?

🟢 適合使用 gcloud SSH 的情境:

  • 使用 GCP VM 時 (特別是在多專案、多帳號情境下)。
  • 希望簡化 SSH 金鑰的管理與配置過程。
  • 需要使用 Google 提供的 OS Login 和 IAM 集中權限管理。
  • 需要透過 IAP (Identity-Aware Proxy) 進行更安全的連線。

🔴 適合使用一般 SSH 指令的情境:

  • 連接到非 GCP 平台上的伺服器 (如 AWS、Azure、Linode)。
  • 需要高度自訂的 SSH 配置 (如特殊的金鑰、特定 Proxy 設定)。
  • 本地開發環境或公司內部伺服器不使用 GCP 時。

總結

使用 gcloud CLI 進行 SSH 連線不僅方便且安全,尤其在 Google Cloud Platform 環境中能大幅簡化流程。

本文介紹了從安裝、初始化到實際連線的每一步操作,並提供了常見問題的解決方案。

希望這篇指南能幫助你快速掌握 gcloud CLI 的 SSH 連接技巧,順利管理你的 GCP 虛擬機實例!

Similar Posts