📢 [文章新增公告] 新增 為 Kubernetes 而生的 GitOps 工具 - ArgoCD 介紹與說明統一機密、身份與加密的管理系統 - HashiCorp Vault 介紹與說明 文章,歡迎點擊前方連結前往查看 💙
目前 Blog 頁籤支援折疊側邊欄功能,在閱讀文章會更方便,歡迎多加利用 💪
透過 AWS SSM 連線至 macOS EC2 並啟用 VNC 遠端桌面 GUI

透過 AWS SSM 連線至 macOS EC2 並啟用 VNC 遠端桌面 GUI

發布於 2025-01-03 · 最後更新於 2025-10-24

名詞說明

  • AWS:Amazon Web Services 亞馬遜的雲端服務

  • SSM:AWS Systems Manager 可以透過 AWS 直接連上內部 VPC 的機器 (不需要在 public subnet)

  • EC2:AWS 的虛擬雲端計算服務

  • VNC:Virtual Network Computing 遠端控制


步驟

  1. 確定使用的 User 有 ssm:StartSession 權限

  2. 確定要連線的 EC2 有 IAM Role 並被賦予 AmazonSSMManagedInstanceCore 權限


AmazonSSMManagedInstanceCore 權限

AmazonSSMManagedInstanceCore 權限


  1. 確定 EC2 上有安裝 SSM Agent,macOS 可以查看:在 macOS 專用 EC2 執行個體使用 SSM Agent - AWS Systems Manager

  2. 接著我們等到 EC2 確定啟動完畢 (macOS 啟動到可以連線需要約 5 分鐘),可以以下指令連線測試

aws ssm start-session --target <instance-id>

<instance-id> 請帶上 EC2 的 instance id


SSM 連線

SSM 連線


確認看看是否可以正常連線,可以下 sudo -i 來切換成 root


  1. 當我們確定可以透過 SSM 連上 EC2 後,接著我們要安裝並啟動 macOS 畫面共用,請安裝以下指令
sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool false
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist

  1. 接著要透過 VNC 連線,需要指定 User,但我們沒辦法拿到 root 密碼,所以只能在建立一個帳號,或是使用預設的 ec2-user,這邊先使用預設帳號,並新增密碼
sudo /usr/bin/dscl . -passwd /Users/ec2-user

  1. 接著開啟新的一個 Terminal 下此指令,透過 SSM 將本機與 EC2 內部的 Port 做 Port forwarding
aws ssm start-session \
    --target <instance-id> \
    --document-name "AWS-StartPortForwardingSession" \
    --parameters '{"portNumber":["5900"], "localPortNumber":["5900"]}'

就會看到這個類似的畫面


SSM Port Forwarding

SSM Port Forwarding


  1. 開啟瀏覽器或是開啟 macOS 內建的螢幕共享,打上
vnc://localhost:5900

就可以看到此畫面囉


VNC 連線到 macOS

VNC 連線到 macOS


備註

假設是建立其他的 User (不是用 ec2-user),在第一次連線時,還是需要先登入 ec2-user 才可以切換其他帳號


參考資料

How can I access my Amazon EC2 macOS instance through a GUI?:Access an EC2 macOS instance through a GUI

AWS Systems Manager 使用 Port-Forwarding:https://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-port-forwarding