

SSH 完整入門教學:Windows & macOS 遠端連線與檔案傳輸指南
什麼是 SSH?為什麼需要 SSH?
SSH (Secure Shell) 是一個加密的遠端連線協議,讓你可以安全地連線到遠端伺服器、執行指令、甚至上傳/下載檔案。與老舊的 Telnet 不同,SSH 使用加密連線,確保你的密碼和資料不會被竊聽。
SSH 的常見用途
- 🖥️ 遠端管理伺服器:執行指令、重啟服務、檢查日誌
- 📤 上傳/下載檔案:透過 SFTP (SSH File Transfer Protocol)
- 🚀 部署網站:上傳程式碼到伺服器
- 🔧 維護應用程式:停止、啟動、更新服務
- 🎮 遊戲伺服器管理:例如 FiveM、Minecraft 伺服器
不論你用 Windows 還是 macOS,現在都有內建的 SSH 工具,不需要安裝額外軟體。
Windows 上的 SSH
方式 1:使用內建 OpenSSH (推薦 – 最簡單)
Windows 10 (1809 版本後) 和 Windows 11 都內建了 OpenSSH Client,完全免費。
步驟 1:啟用 OpenSSH Client
Windows 11:
- 開啟 Settings (設定)
- 左邊選擇 Apps
- 點擊 Optional features (選用功能)
- 搜尋欄位輸入 “OpenSSH Client“
- 如果已安裝會顯示 “Installed”;如果沒有,點擊 “View features” → 搜尋 “OpenSSH” → 勾選 “OpenSSH Client” → 點擊 “Next” → “Install“
等待安裝完成 (通常 1-2 分鐘)。
Windows 10:
- 開啟 Settings
- 選擇 Apps → Apps & features
- 點擊 Manage optional features
- 點擊 Add a feature
- 搜尋 “OpenSSH Client” 並點擊 Install
步驟 2:開啟 PowerShell 連線到伺服器
右鍵點擊 開始 按鈕,選擇 Windows PowerShell (或 Terminal)。
輸入以下指令:
ssh 使用者名稱@伺服器IP
例如:
ssh [email protected]
或連線到特定的連接埠 (預設 22):
ssh [email protected] -p 2222
首次連線會出現類似的訊息:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:abcde123...
Are you sure you want to continue connecting (yes/no)?
輸入 yes 並按 Enter,然後輸入密碼即可連線。
步驟 3:使用 SFTP 上傳/下載檔案
在 PowerShell 中輸入:
sftp 使用者名稱@伺服器IP
例如:
sftp [email protected]
成功連線後會看到 sftp> 提示符。常用指令如下:
| 指令 | 說明 | 範例 |
|---|---|---|
ls | 列出遠端檔案 | ls /home/alamza/ |
lcd 路徑 | 切換本機資料夾 | lcd C:\Users\YourName\Documents |
cd 路徑 | 切換遠端資料夾 | cd /var/www/ |
put 本機檔案 | 上傳檔案到伺服器 | put myfile.txt /home/alamza/ |
get 遠端檔案 | 下載檔案到本機 | get config.php C:\backup\ |
exit 或 quit | 結束 SFTP 連線 | exit |
上傳檔案範例:
sftp> lcd C:\Users\YourName\Downloads
sftp> cd /home/alamza/public_html
sftp> put website.zip
下載檔案範例:
sftp> get backup.sql C:\Backups\
sftp> exit
方式 2:使用第三方 GUI 軟體
如果你不喜歡指令列介面,以下是一些好用的 GUI 工具:
PuTTY (完全免費)
- 官網:https://www.putty.org/
- 優點:老牌軟體、功能完整、輕量
- 缺點:介面較舊
- 適合:喜歡傳統介面、管理多個連線的使用者
PuTTY 連線方式:
- 下載並安裝
- 開啟 PuTTY
- 在 “Host Name” 輸入伺服器 IP
- Port 保留 22 (或自訂)
- Connection Type 選 “SSH”
- 點擊 “Open”
- 輸入使用者名稱和密碼
WinSCP (完全免費)
- 官網:https://winscp.net/
- 優點:整合檔案管理、視覺化操作、支援拖拉
- 缺點:較少用於純指令操作
- 適合:主要做檔案傳輸的使用者
WinSCP 連線方式:
- 下載並安裝
- 開啟 WinSCP
- Protocol 選 “SFTP”
- Host name: 伺服器 IP
- Port: 22 (通常)
- User name: 你的帳號
- Password: 你的密碼
- 點擊 “Login”
- 即可看到本機和遠端檔案,直接拖拉即可傳輸
MobaXterm (部分功能免費)
- 官網:https://mobaxterm.mobatek.net/
- 優點:功能最多、內建SFTP、X11 轉發
- 缺點:專業版付費
- 適合:進階使用者
Termius (免費版+付費版)
- 官網:https://www.termius.com/
- 優點:介面現代美觀、支援多裝置同步
- 缺點:進階功能需付費
- 適合:追求美觀介面的使用者
macOS 上的 SSH
方式 1:使用內建 Terminal (推薦 – 最簡單)
macOS 已經內建完整的 SSH 工具,開箱即用,完全免費。
步驟 1:開啟 Terminal
方法 A (快速):
- 按
Command + Space開啟 Spotlight - 輸入 “terminal”
- 按 Enter
方法 B (標準):
- Finder → Applications → Utilities → Terminal
步驟 2:連線到伺服器
在 Terminal 中輸入:
ssh 使用者名稱@伺服器IP
例如:
ssh [email protected]
或連線到特定連接埠:
ssh [email protected] -p 2222
首次連線會要求確認主機金鑰,輸入 yes 並按 Enter,然後輸入密碼。
步驟 3:使用 SFTP 上傳/下載檔案
在 Terminal 中輸入:
sftp 使用者名稱@伺服器IP
例如:
sftp [email protected]
常用指令與 Windows 相同:
# 查看遠端檔案
sftp> ls /home/alamza/
# 查看本機檔案
sftp> lls ~/Documents
# 上傳檔案
sftp> put ~/Downloads/website.zip /var/www/
# 下載檔案
sftp> get /home/alamza/backup.sql ~/Documents/
# 結束連線
sftp> exit
方式 2:使用 SSH Config 簡化連線
每次都要輸入 IP 和帳號很麻煩?可以設定 SSH config 檔案,讓連線變得更簡單。
編輯 SSH 設定檔
開啟 Terminal 並執行:
nano ~/.ssh/config
如果檔案不存在,會自動建立。加入以下內容:
Host my-server
HostName 192.168.1.100
User alamza
Port 22
Host gameserver
HostName 203.0.113.45
User gameadmin
Port 2222
按 Control + O 儲存,Control + X 結束。
之後就可以簡單地連線:
ssh my-server
ssh gameserver
方式 3:使用內建 SSH 連線管理器 (macOS 12+)
macOS 12 Monterey 以後,Terminal 內建了 SSH 連線管理器,不需要編輯 config 檔案。
步驟 1:開啟 SSH 連線管理器
- 開啟 Terminal
- 在選單列選擇 Shell → New Remote Connection
步驟 2:新增伺服器
- 會彈出一個小視窗
- 確保 “Service” 選 SSH
- 點擊 “+” 按鈕新增伺服器
- 輸入伺服器位址,格式為:
使用者名稱@伺服器IP
- 點擊 “OK” 儲存
步驟 3:連線
下次開啟 Terminal,選擇 Shell → New Remote Connection,就會看到你新增的伺服器,雙擊即可連線。
方式 4:使用第三方 GUI 軟體
iTerm2 (免費)
- 官網:https://iterm2.com/
- 優點:比內建 Terminal 更強大、支援分割視窗
- 缺點:需要學習新的快捷鍵
- 適合:進階開發者
Termius (免費版+付費版)
- 官網:https://www.termius.com/
- 優點:介面美觀、支援多平台同步、整合 SFTP
- 缺點:進階功能付費
- 適合:追求現代化介面的使用者
SSH Commander (免費試用)
- 官網:https://www.wunderbucket.com/
- 優點:整合 SFTP、SSHFS 掛載、SSH 隧道
- 缺點:完整功能需購買授權
- 適合:需要進階功能的管理員
CloudMounter (免費版+付費版)
- 官網:https://cloudmounter.net/
- 優點:可將遠端伺服器當作本機磁碟、支援多種協議
- 缺點:某些功能付費
- 適合:習慣用 Finder 操作的使用者
實用技巧:SSH Keys (無密碼連線)
每次連線都要輸入密碼很煩?可以生成 SSH Key 進行無密碼連線。
生成 SSH Key (Windows & macOS)
Windows PowerShell 或 macOS Terminal:
ssh-keygen -t rsa -b 4096
會出現以下提示:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/alamza/.ssh/id_rsa):
直接按 Enter 使用預設路徑。
Enter passphrase (empty for no passphrase):
可以選擇設定密碼 (按 Enter 表示不設密碼)。
完成後會產生兩個檔案:
~/.ssh/id_rsa(私鑰 – 保管好,不要分享)~/.ssh/id_rsa.pub(公鑰 – 上傳到伺服器)
上傳公鑰到伺服器
方法 1:使用 ssh-copy-id (最簡單,macOS 和 Linux)
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
輸入一次密碼後完成。之後連線不再需要密碼。
方法 2:手動上傳 (如果沒有 ssh-copy-id)
- 複製你的公鑰內容:macOS:
cat ~/.ssh/id_rsa.pub | pbcopyWindows PowerShell:Get-Content C:\Users\YourName\.ssh\id_rsa.pub | Set-Clipboard - SSH 到伺服器:
ssh [email protected] - 編輯授權金鑰檔案:
nano ~/.ssh/authorized_keys - 貼上你複製的公鑰 (右鍵或
Command + V),儲存並結束 - 設定正確的權限:
chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh - 登出並重新連線 – 應該不需要密碼了!
常見問題 (Q&A)
Q1:連線時出現 “Connection refused” 怎麼辦?
A: 檢查以下項目:
- 伺服器是否在線
ping 伺服器IP如果 ping 不通,伺服器可能離線。 - SSH 服務是否執行
- 在伺服器上執行:
sudo systemctl status ssh(Linux) - 或
sudo systemctl status sshd(某些 Linux)
- 在伺服器上執行:
- 防火牆是否允許 SSH 連線
- 檢查伺服器防火牆是否開放 22 埠 (或你設定的埠)
- 檢查本機防火牆設定
- 確認連接埠正確
- 預設是 22,但有些伺服器用不同埠
- 確認用
-p參數指定正確的埠:ssh [email protected] -p 2222
Q2:忘記密碼怎麼辦?
A: 有幾種方式:
- 聯絡伺服器供應商 – 最直接的方式
- 使用 SSH Key – 如果你已設定 SSH Key,可以不用密碼連線
- 實體存取伺服器 – 如果你有伺服器的實體存取權,可以重設密碼
- 使用救援模式 – 某些主機商提供救援模式重設密碼
Q3:出現 “Host key verification failed” 怎麼辦?
A: 這通常表示連線有風險。如果確認伺服器無誤,可以:
- 認識新的主機金鑰,輸入
yes - 手動添加伺服器到已知主機:
ssh-keyscan -H 192.168.1.100 >> ~/.ssh/known_hosts
Q4:如何限制只能用 SSH Key 連線,不允許密碼連線?
A: 在伺服器上編輯 SSH 設定檔:
sudo nano /etc/ssh/sshd_config
找到並修改以下行:
PasswordAuthentication no
PubkeyAuthentication yes
儲存後重啟 SSH 服務:
sudo systemctl restart ssh
警告:執行此操作前,務必確保你已設定 SSH Key 無密碼連線,否則會被鎖在伺服器外!
Q5:如何在 Windows 上用 GUI 工具快速傳輸檔案?
A: 推薦使用 WinSCP:
- 下載安裝 WinSCP
- Protocol 選 “SFTP”
- Host name:伺服器 IP
- User name:帳號
- Password:密碼
- 點擊 Login
- 左邊是本機檔案,右邊是遠端檔案
- 直接拖拉檔案即可傳輸
Q6:連線時出現 “WARNING: UNPROTECTED PRIVATE KEY FILE” 怎麼辦?
A: 這表示私鑰檔案權限設定太寬鬆。修正權限:
macOS / Linux:
chmod 600 ~/.ssh/id_rsa
Windows: 需要透過 PowerShell 修改:
icacls "C:\Users\YourName\.ssh\id_rsa" /inheritance:r /grant:r "%username%:F"
Q7:如何同時上傳多個檔案?
A: 在 SFTP 中使用 mput 指令:
sftp> mput file1.txt file2.txt file3.txt
或使用萬用字元:
sftp> mput *.php
Q8:如何下載整個資料夾?
A: 使用 -r 參數:
sftp> get -r /home/alamza/backup ~/Local-Backup
Q9:如何在 macOS 上建立快速 SSH 連線捷徑?
A: 編輯 ~/.ssh/config 檔案:
nano ~/.ssh/config
加入以下設定:
Host myserver
HostName 192.168.1.100
User alamza
Port 22
IdentityFile ~/.ssh/id_rsa
之後就可以用 ssh myserver 快速連線。
Q10:如何測試 SSH 連線而不執行任何指令?
A: 使用 -v (verbose) 參數查看詳細連線過程:
ssh -v [email protected]
或使用更詳細的 -vv:
ssh -vv [email protected]
這有助於診斷連線問題。
Q11:可以同時連線多個伺服器嗎?
A: 完全可以!開啟多個 Terminal 標籤或視窗,分別連線不同伺服器。
如果想在同一個連線中開啟多個通道,可以使用 screen 或 tmux (進階技巧)。
Q12:SSH 的預設連接埠是多少?
A: 預設是 22。
如果伺服器用不同連接埠 (例如 2222),記得用 -p 參數指定:
ssh -p 2222 [email protected]
快速參考表
Windows 常用指令 (PowerShell)
| 功能 | 指令 |
|---|---|
| 連線到伺服器 | ssh 使用者@IP |
| 指定連接埠連線 | ssh -p 2222 使用者@IP |
| 開啟 SFTP | sftp 使用者@IP |
| 生成 SSH Key | ssh-keygen -t rsa -b 4096 |
| 複製公鑰 | Get-Content C:\Users\YourName\.ssh\id_rsa.pub | Set-Clipboard |
macOS 常用指令 (Terminal)
| 功能 | 指令 |
|---|---|
| 連線到伺服器 | ssh 使用者@IP |
| 指定連接埠連線 | ssh -p 2222 使用者@IP |
| 開啟 SFTP | sftp 使用者@IP |
| 生成 SSH Key | ssh-keygen -t rsa -b 4096 |
| 複製公鑰到伺服器 | ssh-copy-id -i ~/.ssh/id_rsa.pub 使用者@IP |
| 複製公鑰 | cat ~/.ssh/id_rsa.pub | pbcopy |
SFTP 常用指令 (通用)
| 指令 | 說明 |
|---|---|
ls | 列出遠端檔案 |
lls | 列出本機檔案 |
cd 路徑 | 切換遠端資料夾 |
lcd 路徑 | 切換本機資料夾 |
put 檔案 | 上傳檔案 |
get 檔案 | 下載檔案 |
mput 檔案1 檔案2 | 上傳多個檔案 |
mget 檔案1 檔案2 | 下載多個檔案 |
exit 或 quit | 結束連線 |
安全建議
1. 定期更新密碼
如果用密碼認證,建議每 3 個月更新一次密碼。
2. 使用 SSH Key
SSH Key 比密碼更安全。建議所有常用伺服器都設定 SSH Key。
3. 禁用 Root 登入
編輯 /etc/ssh/sshd_config:
PermitRootLogin no
4. 改變預設連接埠
改用非標準連接埠 (例如 2222) 可減少自動化攻擊。
5. 設定登入嘗試限制
在 /etc/ssh/sshd_config 設定:
MaxAuthTries 3
LoginGraceTime 30
6. 監控 SSH 日誌
定期檢查 SSH 連線日誌,尋找異常活動:
tail -f /var/log/auth.log # Linux



