搜尋全站文章

沒有找到相關文章

試試其他關鍵字或檢查拼寫

找到 0 篇文章 • 包含部落格、筆記、旅遊文章

Medium GitHub LinkedIn

面試環境設置指南 - GCP VM 與 Cursor Remote SSH 設定

作者頭像
Sam

2026年1月12日

36 分鐘閱讀

GCP Cursor Remote SSH
面試環境設置指南 - GCP VM 與 Cursor Remote SSH 設定

前言

Latest Contagious Interview malware campaign abuses Microsoft VSCode Tasks

前陣子在社群看到一則貼文,在討論技術面試的時候,有些公司會在 Repo 放上惡意的套件,當開發者打開 Repo 的時候,就會被惡意套件感染,同時本地的金鑰、錢包憑證等敏感資料也會被竊取。很多文章都會提到:「面試時,該做環境隔離、不要在本地操作」,但整個流程實際上該怎麼做沒有被好好的說明,也因此也在思考自己在面試時,如何設定安全的環境。

在公司開發的時候,申請好內部的機器,也會自己走同樣的流程,(有時候開線自己沒有開編輯器,而是在 Terminal 介面打指令就是在做這些事情)。由於方便起見,因此也想來練習如何透過 Cursor 等遠端開發工具,在隔離的環境中進行開發。

前置準備

  • 申請 GCP 帳戶
  • 申請 GCP 專案
  • 設定 Cursor / VS Code Remote SSH

1. GCP VM 建立設定

1.1 建立 SSH Key

根據 GCP 官方文件,首先需要建立 SSH Key:

ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME

執行後會在 ~/.ssh 目錄下看到兩個檔案:

ls -la ~/.ssh -rw-r--r-- 1 USERNAME USERNAME 2616 Jan 12 16:00 KEY_FILENAME -rw-r--r-- 1 USERNAME USERNAME 604 Jan 12 16:00 KEY_FILENAME.pub

就像是鑰匙一樣,建立 SSH 連線時,會去比對公鑰和私鑰是否一致,如果一致的話,就可以建立 SSH 連線。

接著複製公鑰內容:

cat ~/.ssh/KEY_FILENAME.pub ## 會出現像是下面的內容 ssh rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs ...

接著要將這串公開鑰匙填入建立 VM 的步驟當中。

1.2 建立 VM Instance

如果還沒有使用過 GCP,可以參考 GCP 官方文件 來建立 VM。新帳戶會在半年內會有 300 美金的使用額度,或是常跑 GDG 的活動也可以拿到幾美金的優惠卷(小聲說 XD)。

在建立好 GCP 專案後,可以在後台介面建立一個 VM Instance,建議規格如下(以台灣為例):

  • 區域 (Region): asia-east1 (台灣)
  • 機器規格 (Machine Type):
    • 強烈建議: e2-standard-2 (2 vCPU, 8 GB RAM)
    • 警告: e2-medium (4GB RAM) 在跑 npm install 或是編譯大型 Image 時容易發生 OOM (Out of Memory) 導致當機
  • 開機磁碟 (Boot Disk): Ubuntu 22.04 LTS、SSD、建議 50GB
  • Service Account: 務必設定為 No access (無權限) 的專用帳號

📌 註記: 作業系統預設是使用 Debian,如果想要使用其他作業系統,需要在建立時切換成其他作業系統,不然會在安裝套件時出錯。


2. SSH 登入與系統初始化

2.1 SSH 登入

建立好 VM 之後,可以在 GCP Console 後台找到公開的 IP 地址,然後使用以下命令登入 VM (22 port、機器的 SSH 操作介面):

ssh -i ~/.ssh/your-key your-username@your-vm-ip

提示: 在 GCP 專案中,可以找到 VM 的公開 IP 地址,需要替換 your-vm-ip 為實際的 IP 地址。

如果成功登入,會發現使用者名稱改變,同時會出現 Ubuntu 的歡迎畫面。

2.2 系統初始化與 Docker 安裝

我們將使用官方的便利腳本來快速安裝 Docker Engine 與 Docker Compose,並安裝容器安全掃描工具 Trivy。

Step 1: 系統更新與 Git

# 更新系統 sudo apt update && sudo apt upgrade -y # 安裝 Git 與基本工具 sudo apt install git curl wget -y

Step 2: 在 Ubuntu 上安裝 Docker (使用官方腳本)

接著我們需要安裝執行專案所需要的套件,例如:Git、Docker、Trivy 等,為了方便起見,通常都會使用 Docker Compose 來開啟專案,這邊的流程可以參考 Docker Compose 官方文件

# 下載並執行 Docker 安裝腳本 # Add Docker's official GPG key: sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: sudo tee /etc/apt/sources.list.d/docker.sources <<EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") Components: stable Signed-By: /etc/apt/keyrings/docker.asc EOF sudo apt update # 將當前使用者加入 docker 群組 (這樣執行 docker 指令就不需要加 sudo) sudo usermod -aG docker $USER # ⚠️ 注意:執行完上面這行後,必須登出再登入 (或是重新連線 SSH) 才會生效

Step 3: 安裝 Trivy (容器安全掃描工具)

Trivy 是目前業界標準的開源掃描工具,可以掃描 Repo 中的 Dockerfile 設定漏洞以及 Image 內的惡意軟體。更多資訊請參考 Trivy 官方文件

1. 安裝必要工具

sudo apt-get install wget gnupg

2. 下載並加入 Trivy 的官方金鑰 (GPG Key)

wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null

3. 加入 Trivy 倉庫 (Repository)

echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list

4. 安裝 Trivy

sudo apt-get update sudo apt-get install trivy -y

3. Cursor Remote SSH 設定

在本地開發時,可以使用 Cursor 的 Remote SSH 功能連線到 VM,享受遠端開發的便利性。

3.1 安裝必要插件

在本機 Cursor 安裝以下插件:

  • Remote - SSH
  • Dev Containers (選用)

3.2 設定 SSH 連線

步驟:

  1. 在 Cursor 按下 Cmd+Shift+P(Mac)或 Ctrl+Shift+P(Windows/Linux)
  2. 輸入 Remote-SSH: Add New SSH Host...
  3. 選擇 SSH 設定檔位置(通常是 ~/.ssh/config
  4. 貼上以下內容並保存:
Host 專案名稱 HostName 公開的 IP 地址 User 你的使用者名稱 IdentityFile ~/.ssh/你的金鑰檔案 StrictHostKeyChecking no ForwardAgent no

3.3 連線並開始開發

設定完成後,就可以在 Cursor 的 Remote Explorer 中找到設定好的 Host 並連線。

Port Forwarding 自動偵測:

執行 docker compose up -d 或是 npm run dev 後,Cursor 會自動偵測運行中的服務端口,您可以直接在本地瀏覽器輸入 http://localhost:3000 來查看應用畫面。

3.4 CI/CD 後續及其他設定

通常在推完 commit 之後,會進一步的設定 gitlab runner 或是在 Vercel 等平台設定自動化部署流程,與平常的開發流程是相同的,因此在這邊就不多贅述。


4. 面試專案檢核流程 - 三層防護網

成功連線並 Clone 專案前,千萬不要習慣性地馬上輸入 git clone 或是 npm installdocker compose up。請依照以下「三層防護網」進行檢查:

4.1 第一層:IDE 設定檔檢查(最容易被忽略)

攻擊者常利用 VS Code 的自動化功能,只要你用編輯器打開資料夾,惡意腳本就會在背景執行。

檢查項目:

  1. 檢查 .vscode 資料夾

    • 在 Cursor 的檔案總管中,查看根目錄是否有 .vscode 資料夾
  2. 檢視 tasks.json

    • 尋找是否有設定 runOptions: { "runOn": "folderOpen" }
    • 這代表一打開資料夾就會自動執行指令(例如偷取你的 SSH Key 上傳到遠端)
  3. 檢視 extensions.json

    • 是否有推薦安裝不明的擴充套件

4.2 第二層:應用程式相依性檢查(Package.json)

這是前端詐騙最常見的區域。

檢查 scripts 欄位:

特別注意 preinstallpostinstallinstall

🚨 危險訊號:

{ "scripts": { "preinstall": "curl http://... | sh" // ❌ 在安裝套件前下載並執行外部腳本 } }

檢查 dependencies(Typosquatting 攻擊):

攻擊者會上傳名稱很像熱門套件的惡意包。

常見範例:

  • react-dom-render(假)vs ✅ react-dom(真)
  • colors.js(曾被植入惡意迴圈)
  • expres vs ✅ express
  • loadsh vs ✅ lodash

檢查剛發布的套件:

如果看到某個依賴的版本號很新,但該套件本身卻沒什麼名氣,需提高警覺。

4.3 第三層:基礎設施檢查(Docker & Trivy)

確認程式碼沒有明顯問題後,再檢查容器設定,確保隔離環境不會被突破。

靜態檢查 Dockerfile & Compose:

🚨 Volume 掛載檢查:

  • - /:/host (掛載整個根目錄,駭客可直接存取 VM 檔案系統)
  • - /var/run/docker.sock:/var/run/docker.sock (讓容器可以控制外部 Docker Daemon)
  • - ~/.ssh:/root/.ssh (試圖竊取 VM 內的憑證)

🚨 惡意指令:

  • RUN curl ... | sh (下載不明腳本執行)

使用 Trivy 進行掃描:

在 VM 的 Terminal 執行以下指令,讓工具幫你找出漏洞。

# 掃描專案目錄下的設定檔 (IaC Scanning) trivy config . # 掃描檔案系統 (檢查是否有已知的惡意檔案特徵) trivy fs . # 掃描特定嚴重程度的漏洞 trivy fs --severity HIGH,CRITICAL .

4.4 安全執行流程

確認以上三層檢查都沒問題後,才能開始執行:

# 對於 Node.js 專案,使用 --ignore-scripts 避免執行 lifecycle scripts npm install --ignore-scripts # 對於 Docker 專案 docker compose up --build

5. 安全防護黃金守則

針對「如何防範陌生 Repo」,可以歸納為以下 5 個黃金防禦守則:

5.1 物理隔離:拋棄式沙盒 (Disposable Sandbox)

原則: 不要在自己的電腦(Mac/Windows)上直接 Clone 專案。

作法: 一律在 GCP VM 或是 Docker 容器內操作。

理念: 假設這個環境隨時會中毒,所以裡面不放任何個人憑證或重要檔案。

5.2 靜態審查:先看再跑 (Inspect Before Executing)

原則: 下載專案後,絕對不要習慣性馬上輸入 npm installdocker up

檢查點:

  • .vscode/tasks.json:有無自動執行的惡意腳本?
  • package.json:有無奇怪的 preinstall 指令或拼寫錯誤的依賴包?
  • Dockerfile:有無掛載根目錄 (-v /:/host) 或惡意 Base Image?

工具: 使用 Trivy 進行自動化掃描。

5.3 連線衛生:阻斷回連 (Connection Hygiene)

原則: 切斷 VM 反向攻擊本機的橋樑。

作法:

  • SSH 設定:確認 ForwardAgent no,防止惡意程式借用你的身份竊取 GitHub 私人倉庫
  • 瀏覽器預覽:使用無痕模式 (Incognito) 開啟 localhost:3000,防止惡意網頁竊取本機 Cookie

5.4 操作紀律:剪貼簿隔離 (Clipboard Discipline)

風險: 防止「剪貼簿綁架 (Pastejacking)」。

作法: 從 VM 複製出來的指令,永遠不要直接貼上本機 Terminal。先貼到記事本確認內容無誤。

5.5 徹底銷毀:不留後患 (Total Destruction)

作法: 面試或測試結束後,執行 Delete VM 並勾選 Delete Boot Disk

目的: 確保惡意程式沒有任何潛伏機會,同時停止計費。


6. 快速檢查清單

在開始任何專案開發前,請依序完成以下檢查:

  • 已在 GCP VM 上進行操作(非本機)
  • 已檢查 .vscode/tasks.json 無自動執行腳本
  • 已檢查 package.jsonscripts 欄位無可疑指令
  • 已檢查 dependencies 無拼字錯誤(typosquatting)
  • 已檢查 Dockerfiledocker-compose.yml 無危險的 Volume 掛載
  • 已執行 trivy config .trivy fs . 掃描
  • SSH 設定中已設置 ForwardAgent no
  • 使用無痕模式瀏覽本地 Port Forward 的網頁
  • 確認測試結束後會刪除 VM、儲存空間

7. 總結

這篇的目的是想要讓大家在面試時,能夠有一個基本的防護網,避免在面試時被植入惡意程式。當然,這篇的內容並不是完整的防護網,只是希望大家在面試時,能夠有一個基本的防護網。

同時這段流程的專有名詞偏多,自己也是花了大概十幾二十個小時的課程,才習慣 Server 設定的流程,這篇推薦過去上課的內容:Full Stack V3

8. 參考資源

探索更多精彩內容

繼續閱讀,了解更多技術與個人經歷的精彩文章。