使用SSH Key登入Ubuntu伺服器,在GCP與AWS的實務操作分享
當初接觸雲端服務後,最常碰到的就是如何安全且有效率地連接Ubuntu伺服器。以往透過密碼登入,雖然簡單,但安全性與自動化的便利性遠不及SSH金鑰。這篇分享我在Google Cloud Platform(GCP)與Amazon Web Services(AWS)上使用SSH Key登入Ubuntu伺服器的經驗,包含從產生金鑰、設定到維護的細節,還有過程中遇到的一些挑戰與如何解決。
透過SSH Key提升伺服器連線安全與效率
一般Linux伺服器預設開啟SSH服務,允許透過密碼認證登入。但在雲端環境下,暴露在網路上的主機若只靠密碼登入,極易成為攻擊目標。使用SSH Key的優勢相當明顯:
- 公鑰私鑰配對增加安全性,私鑰保存在本地端,公開鑰放在伺服器,只要私鑰不外洩,登入就很難被破解。
- 可搭配自動化腳本,實現無密碼登入,省時方便。
- 一旦設定完成,連線速度和穩定性也會提升,因為省去密碼驗證的互動。
這些特性在管理多台Ubuntu伺服器時,尤其在GCP與AWS這類雲端平台上,帶來了更好的使用體驗。
在GCP設定SSH Key登入Ubuntu伺服器
Google Cloud在VM實例上提供多種SSH連接方式,官方推薦透過瀏覽器內建的SSH,但在某些開發或自動化需求中,使用SSH Key仍是最佳選擇。
產生SSH Key並上傳
我習慣在本地使用ssh-keygen生成一組新的RSA金鑰,指令如下:
```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
過程中會要求輸入儲存路徑與密碼短語(passphrase),個人則推薦設置passphrase以防私鑰外洩。
接著,將產生的公鑰內容(id_rsa.pub)複製到GCP VM的metadata中:
- 在Google Cloud Console中,進入「Compute Engine」→「Metadata」→「SSH Keys」。
- 按下「新增項目」,粘貼公鑰內容。
這裡有一點特別要注意:GCP會自動把SSH Key加到所有VM,但若想限制某台VM使用特定Key,則需要設定該VM實例的「區域元資料」覆蓋全域設定。
直接將公鑰添加到伺服器
有時候透過metadata設定因延遲或配置問題無法即時生效,我會直接透過啟動腳本或手動將公鑰加入Ubuntu使用者的~/.ssh/authorized_keys中:
```bash
echo "ssh-rsa AAAAB3Nza..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```
這樣能確保連線順利,尤其在多個專案或多個使用者管理同一台機器時十分實用。
連線SSH
連線時,指定私鑰位置,例如:
```bash
ssh -i ~/.ssh/id_rsa ubuntu@
```
Ubuntu伺服器預設用戶名多為ubuntu或user,根據映像檔不同稍有差異。GCP的預設通常是ubuntu或gcp-user,可在實例詳情頁確認。
在AWS設定SSH Key登入Ubuntu伺服器
AWS的做法在概念上與GCP類似,但有些操作細節不同,特別是在EC2實例啟動階段。
產生與使用Key Pair
啟動EC2 Ubuntu實例時,AWS強制要求選擇Key Pair。這通常有三種方式:
- 使用AWS提供的Key Pair:在AWS管理控制台生成並下載私鑰
.pem檔。這是最常見且最簡單的做法。 - 使用自有金鑰上傳:可以將自己生成的公鑰上傳至AWS,建立Key Pair。
- 跳過Key Pair:不建議,因為無法SSH登入。
在我過去操作的專案中,多數採用第一種方式,因為AWS會自動將公鑰放入伺服器的~/.ssh/authorized_keys中。
連線步驟
確保私鑰檔權限正確:
```bash
chmod 400 your-key.pem
```
然後使用SSH連線:
```bash
ssh -i your-key.pem ubuntu@
```
AWS Ubuntu映像檔預設用戶名是ubuntu。
Key Pair替換與管理
AWS不允許直接修改或替換啟動時選擇的Key Pair。有次遇到團隊成員忘記私鑰,導致無法登入,我就需透過以下方式救援:
- 使用EC2 Systems Manager(SSM)功能,前提是實例有正確設定IAM角色與SSM代理。
- 透過掛載磁碟到另一台正常運行的實例,手動編輯
authorized_keys。
這讓我體會到Key Pair的管理不能輕忽,丟失私鑰等於失去存取權限。
SSH Key的安全管理與維護
無論在GCP或AWS,SSH Key的安全管理都是成功登入的關鍵。以下是我在實務中總結的幾點:
- 私鑰絕不應該儲存在公用區域,或以明文形式放在軟體代碼庫內。使用
.gitignore避免提交。 - 盡量為私鑰設定密碼短語(passphrase),多了一層防護。
- 建立不同環境或專案專用的Key Pair,避免同一把私鑰用於所有伺服器。
- 定期更新公鑰,將不再使用的Key從伺服器移除。
- 使用SSH代理(如
ssh-agent)管理私鑰,減少輸入密碼次數同時提升安全。 - 在團隊合作時,透過集中化的密鑰管理解決方案(如HashiCorp Vault或AWS Secrets Manager)減少私鑰散落風險。
有次因為一名成員離職,沒有及時收回其公鑰,導致一段時間內伺服器存在風險。後來我建議團隊在成員異動時,立即審查並更新伺服器的authorized_keys,避免不必要的安全漏洞。
真實案例中遇到的困難與應對
在某次跨區域部署Ubuntu VM時,利用GCP的Metadata設定公鑰,但發現無法立即SSH成功。經過排查才發現是Metadata服務同步有延遲,且SSH Daemon配置未及時更新。後來我使用自動化腳本,手動將公鑰寫入各伺服器的authorized_keys,解決連線問題。
類似地,在AWS有次使用Key Pair登入EC2時,因為私鑰權限設定錯誤,導致連線被拒絕。這小細節常被忽略,但SSH非常嚴格要求私鑰權限必須是400或600。調整權限後問題立即解決。
這些小插曲提醒我,在實務操作中,細節往往影響整個流程的順暢,耐心與細心是必備態度。
使用SSH Key登入雲端Ubuntu伺服器的心得
整體來說,掌握SSH Key在GCP與AWS上的運用,能有效提升伺服器連接的安全與效率。每個平台雖然流程略有差異,但核心概念相通:生成密鑰對、將公鑰部署到伺服器、使用私鑰進行身份驗證。
在實務操作中,遇到的問題多半與設定細節、權限及平台特性有關。建立良好的SSH Key管理制度,並熟悉兩大主流雲平台的SSH Key管理方式,能讓系統管理者與開發人員在多雲環境中游刃有餘。
建議在使用過程中,持續累積經驗並關注雲端廠商的最新文檔,尤其是安全性相關的更新。掌握這些技術,不僅能保障系統安全,也能優化開發及維運流程,提升工作效率。