Minghsin University of Science and Technology
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

1

Local AI

--

Uedu Code

--

明新科大 AQI 70 24°C PM2.5 19
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 03

虛擬機:把一台機器變很多台

Hypervisor、VM 規格、SSH 金鑰與防火牆規則
Interaction導覽 20 minute(s)

Learning Objectives

  • 說明虛擬化與 Hypervisor 如何把一台實體主機切成多台互相隔離的虛擬機
  • 建立虛擬機時,看懂要選的項目:區域、作業系統映像檔、規格(vCPU、記憶體、磁碟)、公用 IP
  • 用 ssh-keygen 產生 SSH 金鑰對,說明公鑰與私鑰各放在哪裡,以及為什麼私鑰絕對不能外流
  • 設定防火牆規則時只開放需要的連接埠,並用 ssh 登入虛擬機做第一次檢查

一台實體主機,切成很多台虛擬機

機房裡的一台實體伺服器,可能有幾十個 CPU 核心、幾百 GB 的記憶體。整台只租給一個人用,大部分時間都閒著,太浪費。

虛擬化(virtualization)把一台實體主機在邏輯上切成很多台虛擬機(virtual machine,VM)。 每台虛擬機都以為自己是一台完整的電腦:有自己的 CPU、記憶體、磁碟,也有自己的作業系統。

┌────────────┬────────────┬────────────┐
│  VM 1      │  VM 2      │  VM 3      │
│  你的網站   │  別人的服務  │  另一位客戶  │
│  Ubuntu    │  Windows   │  Debian    │
├────────────┴────────────┴────────────┤
│        Hypervisor(虛擬化層)          │
├──────────────────────────────────────┤
│        實體主機(CPU、記憶體、磁碟)      │
└──────────────────────────────────────┘

負責切割與分配的軟體叫 Hypervisor(虛擬機監控程式)。它把實體的 CPU 時間、記憶體、磁碟分給各台虛擬機, 並且讓它們互相隔離:一台當機或被入侵,不會直接影響另一台。

類型 裝在哪裡 例子
第一型(bare-metal) 直接裝在實體硬體上,效率高 雲端服務商機房裡的主機
第二型(hosted) 裝在一般作業系統上,當成一個應用程式執行 在筆電上用 VirtualBox 開一台 Ubuntu

你在雲端「租一台主機」,拿到的幾乎都是一台虛擬機;這就是第 01 課的 IaaS。

建立虛擬機時要決定的事

不論哪一家雲端服務商,建立虛擬機的頁面都會問你差不多的問題:

項目 意思 選擇的原則
區域(region) 機器放在哪個地區的機房 離使用者近(第 02 課)
作業系統映像檔(image) 虛擬機開機時用的系統範本 本課用 Ubuntu 24.04 LTS;LTS 是長期支援版,有較長的安全更新期
vCPU 分給這台虛擬機的虛擬 CPU 數 靜態網站或小型專題,從最小的規格開始
記憶體(memory) RAM 大小 跑資料庫或機器學習模型才需要比較大
磁碟(disk) 系統碟與資料碟的容量 夠放系統與網站即可,之後可以再加大
SSH 金鑰 登入用的公鑰 見下一節
防火牆規則 哪些連接埠可以從外面連進來 只開需要的
公用 IP(public IP) 讓外面連得到的位址 網站要對外就需要;有些服務商可以另外保留固定 IP

規格越大,每小時的費用越高(第 05 課會算)。規格不夠時,通常可以先關機、換成大一號的規格再開機。

映像檔的概念和 Docker 映像檔類似:一份唯讀的範本,用它建立出一台台的機器。

SSH 金鑰:一把鎖、一把鑰匙

雲端主機沒有螢幕和鍵盤,你要透過網路用 SSH(Secure Shell)遠端登入,在終端機裡下指令。 比起密碼,雲端主機多半要求用 SSH 金鑰對登入:

公鑰(public key) 私鑰(private key)
比喻 一把鎖 打開這把鎖的鑰匙
檔名 id_ed25519.pub(有 .pub) id_ed25519(沒有副檔名)
放在哪裡 交給雲端主機(建立虛擬機時貼上) 只留在你自己的電腦
可以給別人嗎 可以,公開也沒關係 絕對不行

登入時,主機用你給它的公鑰出一道題目,只有持有私鑰的人答得出來;私鑰本身從頭到尾不會在網路上傳送。

私鑰的守則:

  • 不要寄給組員、不要貼到聊天室、不要上傳到 GitHub、不要放進雲端硬碟的共用資料夾
  • 產生時可以設定一組密語(passphrase),私鑰檔被偷走時多一道保護
  • 每個人用自己的金鑰對;組員要登入,請他把公鑰給你,加到主機上
  • 懷疑私鑰外流,就到主機上移除對應的公鑰,再產生一組新的

防火牆規則:只開需要的門

雲端主機一拿到公用 IP,全世界都能嘗試連線,其中不少是自動掃描、猜密碼的程式。 雲端服務商在虛擬機外面提供一層防火牆規則(各家的名稱不同,常見的叫安全性群組 security group 或防火牆規則), 決定哪些連接埠(port)可以從外面連進來:

連接埠 服務 要不要開
22 SSH 遠端登入 要(否則你自己也進不去);可以的話限定只有你的 IP 能連
80 HTTP 網頁 架網站時要
443 HTTPS 網頁 網站加上 HTTPS 之後要
3306、5432 MySQL、PostgreSQL 資料庫 不要對外開;讓網站程式在主機內部或私有網路連線就好

原則是預設全部關閉、只開需要的。開得越多,被攻擊的入口就越多。 第 04 課還會在 Ubuntu 裡再開一層 ufw 防火牆,形成兩道門。

互動練習:虛擬機與容器

虛擬機之外,另一種把一台主機分給很多程式用的方法是容器(container)。左邊是虛擬機、右邊是容器,記憶體與啟動時間都是示意值。依任務操作:先把「應用程式數量」拉到 8,比較兩邊用掉的記憶體;再按「全部啟動」,比較兩邊要等多久;最後回答下方的問題:哪一邊每個應用程式都有自己的一份作業系統?

容器:比虛擬機更輕的選擇

剛才的比較可以看到:

虛擬機 容器
每個應用程式帶什麼 一整套作業系統+函式庫+程式 只帶函式庫+程式,共用主機的作業系統核心
啟動 像開一台電腦,要等開機 像啟動一個程式,很快
隔離程度 強,各自有獨立的作業系統 較輕,共用同一個核心
適合 需要完整控制作業系統、或要跑不同作業系統 把同一個應用程式快速、大量地部署

兩者不是二選一:雲端上很常見的做法是先租虛擬機,再在虛擬機裡跑容器。 容器怎麼建立、怎麼打包成映像檔,請看 Docker 容器軌道;第 06 課也會再談容器如何讓部署更容易。

接下來的導覽,用通用的步驟建立一台虛擬機並登入。各家服務商的畫面不同,但要填的項目大同小異。

導覽:建立虛擬機並用 SSH 登入

以下步驟不綁定特定服務商。範例的公用 IP 是文件專用的保留位址 203.0.113.10,實際操作時換成你的主機拿到的 IP。本機終端機在 macOS、Linux 與 Windows(PowerShell)都內建 ssh 與 ssh-keygen。

  1. 1

    在自己的電腦產生 SSH 金鑰對

    ssh-keygen -t ed25519 產生一組 Ed25519 金鑰對,-C 加上一段註解(通常寫信箱,方便辨認是誰的金鑰)。詢問存放位置時直接按 Enter 用預設路徑;詢問密語(passphrase)時可以設定一組,輸入時畫面不會顯示。完成後在 ~/.ssh/ 會有兩個檔案:id_ed25519 是私鑰,id_ed25519.pub 是公鑰。下面的輸出是 macOS/Linux 的路徑;Windows 會存在 C:\Users\你的帳號\.ssh\,用法相同。

  2. 2

    複製公鑰(只複製 .pub)

    用 cat 顯示公鑰內容,整行複製起來,等一下要貼到建立虛擬機的頁面。注意檔名結尾是 .pub;不要打開或複製沒有 .pub 的私鑰。

  3. 3

    在雲端主控台建立虛擬機

    登入雲端服務商的網頁主控台,找到建立虛擬機(各家的名稱不同,常見的叫執行個體或 Instance)的頁面,依序設定:

    1. 名稱:例如 web-01
    2. 區域:選離使用者近的區域
    3. 映像檔:Ubuntu 24.04 LTS
    4. 規格:先選最小的一級(示意:1~2 vCPU、1~2 GB 記憶體就夠放一個靜態網站)
    5. SSH 金鑰:貼上剛才複製的公鑰;預設的登入帳號在 Ubuntu 映像檔通常是 ubuntu
    6. 防火牆規則:允許 TCP 22(SSH)與 80(HTTP)連入,其他先不要開
    7. 公用 IP:啟用

    按下建立,等狀態變成「執行中」,記下主控台顯示的公用 IP(本例是 203.0.113.10)。從這一刻開始計費,練習結束記得關機或刪除。

  4. 4

    用 SSH 登入

    ssh 帳號@IP 登入。第一次連線時,ssh 會顯示主機的指紋並問你是否信任,輸入 yes,之後這台主機會被記在 ~/.ssh/known_hosts。若產生金鑰時設了密語,這裡會要你輸入。提示字元變成 ubuntu@web-01:~$,代表你已經在雲端主機裡面了。

  5. 5

    第一次檢查:這是一台什麼樣的機器?

    登入後先看看這台主機:uname -a 顯示核心版本與架構,nproc 顯示 CPU 數,df -h 顯示磁碟用量(-h 是用 G、M 這種好讀的單位),free -h 顯示記憶體。數字應該和你建立時選的規格差不多。注意上一步歡迎訊息裡的 10.0.0.4 是雲端內部網路的私有 IP,外面的人要用公用 IP 203.0.113.10 才連得到。看完輸入 exit 離開,回到自己的電腦。

這段導覽完成了

想一想:虛擬化與規格

1.

在雲端機房裡,負責把一台實體主機的 CPU、記憶體分給多台虛擬機,並讓它們彼此隔離的是?

2.

建立虛擬機時選擇「Ubuntu 24.04 LTS」,這是在選什麼?

3.

同樣在一台主機上跑 8 個應用程式,為什麼虛擬機通常比容器用掉更多記憶體?

第 1 次作答

想一想:金鑰與防火牆

1.

組員也需要登入你們的雲端主機。正確的做法是?

2.

一台只放靜態網站的虛擬機,防火牆規則最合適的設定是?

第 1 次作答

重點精華回顧

  • 虛擬化用 Hypervisor 把一台實體主機切成多台互相隔離的虛擬機,每台有自己的作業系統;雲端租到的主機多半是虛擬機。
  • 建立虛擬機要選:區域、作業系統映像檔(本課用 Ubuntu 24.04 LTS)、規格(vCPU、記憶體、磁碟)、SSH 公鑰、防火牆規則、公用 IP。
  • ssh-keygen -t ed25519 產生金鑰對:公鑰(.pub)交給主機,私鑰只留在自己的電腦,絕對不能分享或上傳。
  • 防火牆規則預設全關、只開需要的連接埠:SSH 22、HTTP 80、HTTPS 443;資料庫連接埠不對外開放。
  • ssh ubuntu@IP 登入;用 uname -a、nproc、df -h、free -h 檢查機器;exit 離開。
  • 容器共用主機的核心,比虛擬機輕、啟動快;常見做法是在虛擬機裡跑容器,詳見 Docker 容器軌道。
  • 虛擬機建立後就開始計費,練習完記得關機或刪除。
這一課完成了!
Next lesson:在雲端主機上架一個網站
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。