SSH 遠端管理
# 遠端管理 AWS EC2 的基本觀念
AWS EC2 是雲端中的虛擬伺服器。建立 EC2 後,通常需要透過網路從自己的電腦連入,進行以下管理工作:
- 安裝套件與應用程式
- 修改設定檔
- 啟動或停止服務
- 上傳與下載檔案
- 查看日誌與系統狀態
- 執行部署或維護工作
遠端登入是否成功,通常取決於以下幾項設定:
1. **EC2 是否正在執行**
2. **是否有可連線的 IP 位址**
- Public IPv4 address
- Elastic IP
- 或透過 VPN、堡壘機、AWS Systems Manager 連入私有網路
3. **Security Group 是否開放正確連接埠**
4. **登入帳號是否正確**
5. **金鑰或密碼是否正確**
6. **作業系統類型**
- Linux 通常使用 SSH
- Windows Server 通常使用 RDP
---
# 一、建立 EC2 時應注意的設定
## 1. Key pair(金鑰對)
建立 EC2 時,AWS 通常會要求選擇或建立 Key pair。
常見檔案格式:
- `.pem`:Linux、macOS、Windows OpenSSH 常用
- `.ppk`:PuTTY 常用
私鑰只能下載一次,應妥善保管,不能公開或上傳到 GitHub。
例如:
```text
my-ec2-key.pem
```
---
## 2. Security Group
Security Group 類似虛擬防火牆,必須允許你的電腦連入相應連接埠。
常見設定:
| 用途 | 通訊協定 | 連接埠 | 建議來源 |
|---|---|---:|---|
| Linux SSH | TCP | 22 | My IP |
| Windows Remote Desktop | TCP | 3389 | My IP |
| Web HTTP | TCP | 80 | 0.0.0.0/0 |
| Web HTTPS | TCP | 443 | 0.0.0.0/0 |
建議不要將 SSH 或 RDP 開放給所有來源:
```text
0.0.0.0/0
```
較安全的做法是選擇:
```text
My IP
```
或指定公司的固定公網 IP。
---
## 3. 取得 EC2 的連線資訊
在 AWS Console:
1. 進入 **EC2**
2. 選擇 **Instances**
3. 點選自己的執行個體
4. 查看:
- Public IPv4 address
- Public IPv4 DNS
- Private IPv4 address
- Security Group
- Instance state
假設公網 IP 為:
```text
203.0.113.10
```
---
# 二、Linux EC2:使用 SSH 遠端登入
Linux EC2 通常使用 SSH,透過金鑰驗證,不使用一般密碼登入。
常見預設登入帳號:
| AMI | 預設使用者 |
|---|---|
| Amazon Linux | `ec2-user` |
| Ubuntu | `ubuntu` |
| Debian | `admin` 或 `debian` |
| CentOS | `centos` |
| RHEL | `ec2-user` 或 `root` |
| Fedora | `fedora` |
實際帳號應以 AWS 建立執行個體時顯示的連線說明為準。
---
# 三、在 Mac 上登入 Linux EC2
macOS 內建 Terminal 與 SSH,不需要額外安裝軟體。
## 步驟 1:開啟 Terminal
可以使用:
```text
Applications → Utilities → Terminal
```
或使用 Spotlight 搜尋「Terminal」。
---
## 步驟 2:設定私鑰權限
假設私鑰放在下載資料夾:
```bash
chmod 400 ~/Downloads/my-ec2-key.pem
```
SSH 通常要求私鑰不能被其他使用者讀取,否則可能出現:
```text
Permissions 0644 for 'xxx.pem' are too open
```
---
## 步驟 3:執行 SSH 指令
以 Amazon Linux 為例:
```bash
ssh -i ~/Downloads/my-ec2-key.pem ec2-user@203.0.113.10
```
以 Ubuntu 為例:
```bash
ssh -i ~/Downloads/my-ec2-key.pem ubuntu@203.0.113.10
```
第一次連線時,可能會出現是否信任主機的提示:
```text
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```
確認 IP 正確後輸入:
```text
yes
```
成功後,就會進入 EC2 的命令列環境。
---
## 使用 AWS Console 產生連線指令
也可以在 EC2 Instance 頁面:
1. 選擇執行個體
2. 按 **Connect**
3. 選擇 **SSH client**
4. 複製 AWS 顯示的指令
5. 在 Mac Terminal 執行
這樣可以減少登入帳號或參數輸入錯誤。
---
# 四、在 Windows 上登入 Linux EC2
Windows 有幾種常見方式。
## 方法一:使用 PowerShell 或 Windows Terminal
較新的 Windows 通常內建 OpenSSH Client。
開啟:
- Windows Terminal
- PowerShell
- 命令提示字元
假設 `.pem` 檔案位於:
```text
C:\Users\YourName\Downloads\my-ec2-key.pem
```
執行:
```powershell
ssh -i C:\Users\YourName\Downloads\my-ec2-key.pem ec2-user@203.0.113.10
```
Ubuntu 伺服器則使用:
```powershell
ssh -i C:\Users\YourName\Downloads\my-ec2-key.pem ubuntu@203.0.113.10
```
Windows 路徑也可以使用引號:
```powershell
ssh -i "C:\Users\YourName\Downloads\my-ec2-key.pem" ubuntu@203.0.113.10
```
如果出現找不到 `ssh`,可以在 Windows 的「選用功能」中安裝 **OpenSSH Client**,或使用 PuTTY。
---
## 方法二:使用 PuTTY
PuTTY 是 Windows 常見的 SSH 工具。
### 1. 安裝 PuTTY
安裝:
- PuTTY
- PuTTYgen
### 2. 將 `.pem` 轉成 `.ppk`
開啟 PuTTYgen:
1. 按 **Load**
2. 選擇 `.pem` 檔案
3. 按 **Save private key**
4. 儲存為 `.ppk`
### 3. 設定 PuTTY
開啟 PuTTY,在 **Session** 輸入:
- Host Name:
```text
ec2-user@203.0.113.10
```
或:
```text
ubuntu@203.0.113.10
```
- Port:`22`
- Connection type:`SSH`
接著到:
```text
Connection → SSH → Auth → Credentials
```
選擇剛才產生的 `.ppk` 檔案,最後按 **Open**。
---
# 五、Windows Server EC2:使用 RDP 遠端桌面
如果建立的是 Windows Server EC2,通常不是使用 SSH,而是使用 **Remote Desktop Protocol,RDP**。
RDP 預設使用:
```text
TCP 3389
```
## 步驟 1:確認 Security Group
在 EC2 的 Security Group 中,新增:
```text
Type: RDP
Port: 3389
Source: My IP
```
不建議開放:
```text
0.0.0.0/0
```
---
## 步驟 2:取得 Windows 管理員密碼
在 AWS Console:
1. 進入 EC2
2. 選擇 Windows 執行個體
3. 按 **Connect**
4. 選擇 **RDP client**
5. 按 **Get password**
6. 上傳建立 EC2 時使用的 `.pem` 私鑰
7. AWS 會解密並顯示:
- 使用者名稱,通常是 `Administrator`
- 密碼
注意:EC2 啟動後可能需要等待幾分鐘,才能取得密碼。
---
## 步驟 3:Windows 電腦使用 Remote Desktop
在 Windows 上:
1. 開啟「遠端桌面連線」
2. 輸入 EC2 的 Public IPv4 address
3. 按 **Connect**
4. 輸入:
- Username:`Administrator`
- AWS 顯示的密碼
5. 接受憑證提示後登入
也可以使用執行視窗:
```text
Win + R → mstsc
```
---
## 步驟 4:Mac 使用 Microsoft Remote Desktop
在 Mac 上:
1. 從 Mac App Store 安裝 **Windows App** 或 **Microsoft Remote Desktop**
2. 新增 PC
3. 在 PC name 輸入 EC2 的 Public IPv4 address
4. 新增 User account:
- Username:`Administrator`
- Password:AWS 解密得到的密碼
5. 儲存並連線
---
# 六、常見連線錯誤與排查方式
## 1. `Connection timed out`
通常原因:
- Security Group 沒有開放 22 或 3389
- 開放來源不是目前的公網 IP
- EC2 沒有 Public IP
- EC2 位於私有子網路
- Network ACL 或路由設定阻擋
- EC2 尚未完全啟動
排查方式:
- 確認 EC2 狀態為 `Running`
- 確認連線的 IP 是目前的 Public IPv4
- 確認 Security Group 的來源 IP
- 確認 VPC Route Table 有 Internet Gateway
---
## 2. `Permission denied (publickey)`
通常原因:
- 登入帳號錯誤
- 私鑰不是建立該 EC2 時使用的金鑰
- 私鑰路徑錯誤
- Linux AMI 的預設使用者錯誤
可依序嘗試:
```bash
ssh -i my-ec2-key.pem ec2-user@IP位址
```
或:
```bash
ssh -i my-ec2-key.pem ubuntu@IP位址
```
---
## 3. `UNPROTECTED PRIVATE KEY FILE`
Mac 或 Linux 可修正:
```bash
chmod 400 my-ec2-key.pem
```
Windows 使用 OpenSSH 時,若權限錯誤,可以將私鑰移至只有自己可存取的資料夾,或調整檔案安全性權限。
---
## 4. IP 位址改變
若 EC2 使用一般的 Public IPv4,停止再啟動後可能會取得新的 IP。
解決方式:
- 使用 **Elastic IP**
- 或透過 AWS Systems Manager 管理,不依賴公網 IP
---
# 七、安全管理建議
1. SSH 和 RDP 只開放給自己的 IP。
2. 不要把 `.pem` 或 `.ppk` 放到公開儲存庫。
3. 不要透過聊天工具或郵件隨意傳送私鑰。
4. 登入後避免長期使用 `root`。
5. 使用 SSH key,而不是弱密碼。
6. Windows Server 應定期更新安全性修補程式。
7. 需要多人管理時,考慮:
- AWS Systems Manager Session Manager
- VPN
- Bastion Host
- IAM 與 CloudTrail 稽核
8. 不需要使用的 EC2 應停止或終止,避免持續產生費用。
簡單來說:
- **Mac 登入 Linux EC2**:使用 Terminal 的 `ssh`
- **Windows 登入 Linux EC2**:使用 PowerShell、Windows Terminal 或 PuTTY
- **Windows Server EC2**:Windows 或 Mac 都使用 RDP
- 登入前最重要的是確認 **IP、Security Group、登入帳號與金鑰** 都正確。
相關學習地圖、教學課程
Python 後端工程、資料庫