Localhost SSH 連線教學|本機遠端連線設定
你可能會想:「SSH 不是用來連遠端伺服器的嗎?為什麼要連自己的電腦?」這是個好問題。事實上,用 SSH 連線到 localhost 有很多實用場景:
- 測試 SSH 設定:部署到遠端之前,先在本機測試
- 模擬遠端環境:讓開發環境更接近正式部署的狀態
- SSH Tunnel:透過 localhost 建立安全通道,轉發流量
- 練習 SSH 操作:學習 SSH 的好方法,不用擔心搞壞真正的伺服器
本文會從最基礎的 SSH 概念開始,一步步帶你設定 Windows、Mac、Linux 的 SSH 伺服器,讓你可以 SSH 到自己的電腦。
要點一:什麼是 SSH?為什麼要連 localhost?
在開始設定之前,我們先來理解 SSH 的基本概念。
SSH 是什麼?
SSH(Secure Shell)是一種加密的網路協定,用來在不安全的網路上建立安全的連線。它最常見的用途是遠端登入伺服器,讓你在自己的電腦上操作遠端機器的終端機。
SSH 的核心特點:
| 特點 | 說明 |
|---|---|
| 加密傳輸 | 所有通訊內容都經過加密 |
| 身份驗證 | 可用密碼或金鑰驗證身份 |
| Port 22 | 預設使用 22 port |
| 雙向通訊 | 可以執行命令、傳輸檔案 |
SSH 的運作模式
SSH 採用 Client-Server 架構:
[SSH Client] ─────連線────→ [SSH Server]
你的電腦 遠端伺服器
(發起連線) (等待連線)
當你執行 ssh user@server 時:
1. SSH Client 連線到 Server 的 22 port
2. 雙方交換加密金鑰
3. 進行身份驗證(密碼或金鑰)
4. 驗證成功後,取得遠端的 Shell
為什麼要 SSH 到 localhost?
SSH 到 localhost 就是讓你的電腦同時扮演 Client 和 Server:
[SSH Client] ─────連線────→ [SSH Server]
你的電腦 同一台電腦
(發起連線) (等待連線)
這看起來有點多此一舉,但其實很實用:
1. 測試 SSH 設定
在把應用程式部署到遠端伺服器之前,你可以先在本機測試 SSH 連線是否正常、設定檔是否正確。這樣可以在安全的環境中發現問題。
2. 練習 SSH 操作
對於 SSH 新手來說,連到 localhost 是最安全的練習方式。你可以隨便嘗試各種命令,不用擔心把真正的伺服器搞壞。
3. SSH Tunnel 應用
SSH Tunnel 可以建立安全的加密通道,把本機的連線轉發到其他地方。這在許多情境下非常有用,例如:
- 存取被防火牆擋住的服務
- 加密不安全的網路流量
- 繞過區域限制
4. 開發與測試自動化
許多 CI/CD 工具和部署腳本使用 SSH 來連線和部署。在本機測試這些腳本時,連到 localhost 可以驗證邏輯是否正確。
要點二:Windows SSH 伺服器啟用
Windows 10(1809 版本以後)和 Windows 11 已經內建 OpenSSH,但預設沒有啟用 SSH 伺服器。以下是啟用步驟。
檢查 OpenSSH 安裝狀態
首先,確認你的 Windows 是否已安裝 OpenSSH:
- 開啟「設定」→「應用程式」→「選用功能」
- 搜尋「OpenSSH」
- 查看是否已安裝「OpenSSH 用戶端」和「OpenSSH 伺服器」
安裝 OpenSSH 伺服器
如果沒有安裝「OpenSSH 伺服器」:
- 在「選用功能」頁面,點選「新增功能」
- 搜尋「OpenSSH」
- 勾選「OpenSSH 伺服器」
- 點選「安裝」
- 等待安裝完成
或者使用 PowerShell(以系統管理員身份執行):
# 檢查 OpenSSH 可用功能
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# 安裝 OpenSSH 伺服器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
啟動 SSH 服務
安裝完成後,需要啟動 SSH 服務:
方法一:透過服務管理員
- 按
Win + R,輸入services.msc,按 Enter - 找到「OpenSSH SSH Server」
- 右鍵 →「啟動」
- 如果想開機自動啟動,右鍵 →「內容」→ 啟動類型改為「自動」
方法二:使用 PowerShell
# 啟動 SSH 服務
Start-Service sshd
# 設定開機自動啟動
Set-Service -Name sshd -StartupType 'Automatic'
# 確認服務狀態
Get-Service sshd
確認防火牆設定
OpenSSH 安裝時通常會自動新增防火牆規則,但建議確認一下:
# 檢查防火牆規則
Get-NetFirewallRule -Name *ssh*
# 如果沒有,手動新增
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
測試連線
現在可以測試 SSH 連線了:
# 連線到 localhost
ssh username@localhost
# 或使用 127.0.0.1
ssh [email protected]
第一次連線時,系統會詢問是否信任這個主機的指紋:
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
輸入 yes 繼續,然後輸入你的 Windows 密碼即可登入。
Windows SSH 設定檔位置
Windows OpenSSH 的設定檔位於:
| 檔案 | 位置 |
|---|---|
| 伺服器設定 | C:\ProgramData\ssh\sshd_config |
| 用戶設定 | C:\Users\<使用者>\.ssh\config |
| 授權金鑰 | C:\Users\<使用者>\.ssh\authorized_keys |
要點三:Mac SSH 設定
Mac 已經內建完整的 OpenSSH,包含 Client 和 Server,只是 SSH 伺服器預設是關閉的。
啟用遠端登入
方法一:透過系統偏好設定
- 開啟「系統偏好設定」→「共享」
- 勾選「遠端登入」
- 選擇允許存取的使用者(「所有使用者」或「僅限以下使用者」)
啟用後,系統會顯示你的電腦名稱和 IP 位址。
方法二:使用終端機
# 啟用遠端登入
sudo systemsetup -setremotelogin on
# 確認狀態
sudo systemsetup -getremotelogin
測試連線
# 連線到 localhost
ssh $(whoami)@localhost
# 或指定使用者
ssh username@localhost
第一次連線會看到主機指紋確認訊息,輸入 yes 後輸入密碼即可。
Mac SSH 設定檔位置
| 檔案 | 位置 |
|---|---|
| 伺服器設定 | /etc/ssh/sshd_config |
| 用戶設定 | ~/.ssh/config |
| 授權金鑰 | ~/.ssh/authorized_keys |
設定 SSH 伺服器選項
如果需要修改 SSH 伺服器設定:
# 編輯設定檔
sudo nano /etc/ssh/sshd_config
常見設定項目:
# 是否允許密碼登入
PasswordAuthentication yes
# 是否允許 root 登入
PermitRootLogin no
# 允許的使用者(可選)
AllowUsers username
# 連接埠(預設 22)
Port 22
修改後需要重新載入設定:
# 重新載入 SSH 服務
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
要點四:Linux SSH 設定
大多數 Linux 發行版都有預裝 OpenSSH Client,但 Server 可能需要額外安裝。
Ubuntu / Debian 系列
# 更新套件清單
sudo apt update
# 安裝 OpenSSH 伺服器
sudo apt install openssh-server
# 確認服務狀態
sudo systemctl status ssh
如果服務沒有自動啟動:
# 啟動 SSH 服務
sudo systemctl start ssh
# 設定開機自動啟動
sudo systemctl enable ssh
CentOS / RHEL / Fedora 系列
# 安裝 OpenSSH 伺服器(如果尚未安裝)
sudo dnf install openssh-server
# 或使用 yum(較舊版本)
sudo yum install openssh-server
# 啟動服務
sudo systemctl start sshd
# 設定開機自動啟動
sudo systemctl enable sshd
Arch Linux
# 安裝 OpenSSH
sudo pacman -S openssh
# 啟動服務
sudo systemctl start sshd
# 設定開機自動啟動
sudo systemctl enable sshd
確認防火牆設定
使用 ufw(Ubuntu/Debian)
# 允許 SSH
sudo ufw allow ssh
# 或指定 port
sudo ufw allow 22/tcp
# 確認狀態
sudo ufw status
使用 firewalld(CentOS/Fedora)
# 允許 SSH
sudo firewall-cmd --permanent --add-service=ssh
# 重新載入
sudo firewall-cmd --reload
# 確認
sudo firewall-cmd --list-services
測試連線
# 連線到 localhost
ssh $(whoami)@localhost
# 使用詳細模式除錯
ssh -v username@localhost
Linux SSH 設定檔位置
| 檔案 | 位置 |
|---|---|
| 伺服器設定 | /etc/ssh/sshd_config |
| 用戶設定 | ~/.ssh/config |
| 授權金鑰 | ~/.ssh/authorized_keys |
要點五:SSH 連線測試
設定完成後,讓我們來驗證 SSH 是否正常運作。
基本連線測試
# 最基本的連線
ssh username@localhost
# 使用 IP 位址
ssh [email protected]
# 指定 port(如果不是預設 22)
ssh -p 22 username@localhost
檢查連線詳細資訊
使用 -v 參數可以看到詳細的連線過程,這對除錯很有幫助:
ssh -v username@localhost
輸出會顯示:
- SSH 版本協商
- 加密演算法選擇
- 身份驗證過程
- 連線建立狀態
更詳細的資訊可以用 -vv 或 -vvv。
測試命令執行
登入後,可以測試一些基本命令:
# 查看目前位置
pwd
# 查看系統資訊
uname -a
# 查看登入使用者
whoami
# 離開 SSH
exit
不登入 Shell,只執行命令
SSH 可以直接執行遠端命令而不進入互動 Shell:
# 執行單一命令
ssh username@localhost "ls -la"
# 執行多個命令
ssh username@localhost "cd /tmp && pwd && ls"
# 執行腳本
ssh username@localhost "bash -s" < local_script.sh
檢查 SSH 服務狀態
Windows
Get-Service sshd
Mac
sudo launchctl list | grep ssh
Linux
sudo systemctl status ssh # Ubuntu/Debian
sudo systemctl status sshd # CentOS/Fedora
要點六:SSH 金鑰設定(免密碼登入)
每次 SSH 都要輸入密碼很麻煩,使用金鑰認證可以讓登入更方便,同時也更安全。
什麼是 SSH 金鑰?
SSH 金鑰是一對加密金鑰:
| 金鑰 | 說明 | 存放位置 |
|---|---|---|
| 私鑰 | 保密,不能外洩 | 你的電腦 ~/.ssh/id_ed25519 |
| 公鑰 | 可以公開分享 | 伺服器 ~/.ssh/authorized_keys |
金鑰認證的流程:
1. 你把公鑰放到伺服器上
2. 連線時,伺服器用公鑰加密一個隨機字串
3. 你的電腦用私鑰解密並回傳
4. 驗證成功,允許登入
產生 SSH 金鑰
在你的電腦上執行:
# 產生 ED25519 金鑰(推薦)
ssh-keygen -t ed25519 -C "[email protected]"
# 或使用 RSA(較舊但相容性更好)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
執行後會詢問:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/you/.ssh/id_ed25519):
直接按 Enter 使用預設位置。
接著會詢問 passphrase(密碼短語):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
建議設定一個 passphrase 增加安全性,但如果是本機測試用,可以留空。
複製公鑰到伺服器
因為我們連的是 localhost(同一台電腦),所以複製公鑰特別簡單:
# 查看公鑰內容
cat ~/.ssh/id_ed25519.pub
# 直接複製到 authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
# 確認權限正確
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
或使用 ssh-copy-id 命令(更簡單):
ssh-copy-id username@localhost
測試金鑰登入
ssh username@localhost
如果設定正確,應該不會再要求輸入密碼(除非你設定了 passphrase)。
設定 SSH Agent(記住 passphrase)
如果你設定了 passphrase,每次使用都要輸入會很麻煩。SSH Agent 可以幫你記住:
# 啟動 SSH Agent
eval "$(ssh-agent -s)"
# 加入私鑰
ssh-add ~/.ssh/id_ed25519
# 確認已加入的金鑰
ssh-add -l
Mac 使用者可以讓 Keychain 記住:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
並在 ~/.ssh/config 加入:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
安全建議
| 項目 | 建議 |
|---|---|
| 私鑰權限 | 設為 600,只有自己可讀 |
| Passphrase | 建議設定,增加一層保護 |
| 金鑰備份 | 安全保存私鑰,遺失無法復原 |
| 定期更換 | 金鑰用久了可以重新產生 |
要點七:常見問題排解
SSH 連線可能會遇到各種問題,以下是常見問題和解決方案。
問題一:Connection refused
錯誤訊息:
ssh: connect to host localhost port 22: Connection refused
可能原因與解決方案:
-
SSH 服務未啟動
- Windows:執行Start-Service sshd
- Mac:系統偏好設定啟用「遠端登入」
- Linux:執行sudo systemctl start ssh -
防火牆阻擋
- 確認防火牆允許 22 port -
SSH 監聽不同 port
- 檢查sshd_config中的Port設定
問題二:Permission denied
錯誤訊息:
Permission denied (publickey,password).
可能原因與解決方案:
-
密碼錯誤
- 確認輸入正確的使用者密碼 -
使用者不允許 SSH 登入
- 檢查sshd_config中的AllowUsers或DenyUsers -
密碼認證被禁用
- 確認sshd_config中PasswordAuthentication yes -
金鑰認證失敗
- 確認~/.ssh/authorized_keys包含正確的公鑰
- 確認檔案權限正確
問題三:Host key verification failed
錯誤訊息:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
解決方案:
這表示伺服器的主機金鑰改變了(可能是重新安裝 SSH)。如果是你自己的電腦,可以移除舊的金鑰:
# 移除特定主機的金鑰
ssh-keygen -R localhost
# 重新連線,會要求確認新的指紋
ssh username@localhost
問題四:Too many authentication failures
錯誤訊息:
Received disconnect from localhost: Too many authentication failures
解決方案:
SSH 嘗試太多種認證方式失敗了。明確指定認證方式:
# 只使用密碼認證
ssh -o PreferredAuthentications=password username@localhost
# 只使用金鑰認證
ssh -o PreferredAuthentications=publickey username@localhost
問題五:Windows 上找不到 ssh 命令
解決方案:
確認已安裝 OpenSSH Client:
- 「設定」→「應用程式」→「選用功能」
- 搜尋「OpenSSH」
- 安裝「OpenSSH 用戶端」
或使用 PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
除錯技巧
使用詳細模式可以看到更多資訊:
# 詳細模式
ssh -v username@localhost
# 更詳細
ssh -vv username@localhost
# 最詳細
ssh -vvv username@localhost
檢查伺服器端的日誌也很有幫助:
# Linux
sudo journalctl -u ssh -f
# Mac
log stream --predicate 'process == "sshd"'
如果這個步驟卡關,可以聯繫我們讓工程師直接幫你處理。
要點八:進階應用:SSH Tunnel
SSH Tunnel 是 SSH 最強大的功能之一,可以讓你建立安全的加密通道,轉發網路流量。
什麼是 SSH Tunnel?
SSH Tunnel 就像一個加密的管道,讓你把 A 地點的流量,透過 SSH 連線,安全地傳送到 B 地點。
常見用途:
- 存取防火牆後面的服務
- 加密不安全的連線(如 HTTP)
- 繞過網路限制
Local Port Forwarding(本地轉發)
把本機的某個 port 轉發到遠端機器可以存取的位置。
ssh -L 本地port:目標主機:目標port username@ssh伺服器
範例:透過 localhost SSH Tunnel 存取遠端資料庫
假設你想透過 SSH Tunnel 連到一個只有 localhost 可以存取的資料庫:
# 把本機 3307 port 轉發到 localhost 的 3306(MySQL)
ssh -L 3307:localhost:3306 username@localhost
現在連線到 localhost:3307 就等於連到 SSH 伺服器上的 localhost:3306。
Remote Port Forwarding(遠端轉發)
把遠端機器的某個 port 轉發到本機可以存取的位置。
ssh -R 遠端port:本地主機:本地port username@ssh伺服器
範例:讓遠端機器可以存取本機服務
# 把遠端的 8080 port 轉發到本機的 3000
ssh -R 8080:localhost:3000 username@remote-server
這樣在遠端伺服器上存取 localhost:8080 就會連到你本機的 3000 port。
Dynamic Port Forwarding(動態轉發 / SOCKS Proxy)
建立一個 SOCKS Proxy,所有流量都可以透過 SSH 加密傳輸。
ssh -D 1080 username@localhost
然後在瀏覽器或應用程式中設定 SOCKS Proxy:
- Host: 127.0.0.1
- Port: 1080
實用的 SSH Tunnel 設定
背景執行 Tunnel
加上 -f 和 -N 參數可以讓 Tunnel 在背景執行:
# -f: 背景執行
# -N: 不執行遠端命令
ssh -f -N -L 3307:localhost:3306 username@localhost
保持連線不斷
長時間的 Tunnel 可能會因為閒置而斷線,可以設定 Keep Alive:
ssh -o ServerAliveInterval=60 -L 3307:localhost:3306 username@localhost
或在 ~/.ssh/config 加入:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
透過 SSH Tunnel 的實際應用場景
| 場景 | 命令 | 說明 |
|---|---|---|
| 加密存取資料庫 | ssh -L 3307:localhost:3306 user@server |
安全連線 MySQL |
| 存取內網 Web 服務 | ssh -L 8080:internal:80 user@server |
存取防火牆後的網站 |
| 建立 SOCKS Proxy | ssh -D 1080 user@server |
所有流量加密 |
| 讓遠端存取本機服務 | ssh -R 8080:localhost:3000 user@server |
臨時公開本機程式 |
程式只能在本機跑?
讓我們幫你從 localhost 走向全世界,把專案部署到雲端。
常見問題 FAQ
Windows 有 SSH 嗎?
有。Windows 10(1809 版本以後)和 Windows 11 內建 OpenSSH。SSH Client 預設已安裝,SSH Server 需要在「選用功能」中額外安裝。安裝後透過服務管理員啟動「OpenSSH SSH Server」即可使用。
SSH 連 localhost 有什麼用?
SSH 連 localhost 有幾個實用場景:
1. 測試 SSH 設定:在部署到遠端前先在本機測試
2. 練習 SSH 操作:安全的學習環境
3. SSH Tunnel:建立加密通道轉發流量
4. 模擬遠端環境:讓開發環境更接近正式部署
5. 測試自動化腳本:驗證 CI/CD 部署腳本
金鑰登入比密碼安全嗎?
是的,金鑰登入通常比密碼更安全:
| 比較項目 | 密碼認證 | 金鑰認證 |
|---|---|---|
| 暴力破解風險 | 較高 | 極低(金鑰長度夠長) |
| 可被竊聽 | 有風險 | 私鑰不會透過網路傳輸 |
| 便利性 | 每次輸入 | 可免密碼登入 |
| 管理難度 | 簡單 | 需要妥善保管私鑰 |
建議使用 ED25519 或 RSA-4096 金鑰,並設定 passphrase 增加額外保護。
延伸閱讀
想深入了解 localhost 相關主題?推薦閱讀:
- Localhost 是什麼?完整入門指南
- Localhost IP 設定教學|讓區網裝置連到你的電腦
- Localhost HTTPS 憑證設定教學|mkcert 本機 SSL 完整指南
- Ngrok 教學|一鍵讓 Localhost 變成公開網址
- Cloudflare Tunnel 教學|免費讓本機程式上線
程式只能在本機跑?
讓我們幫你從 localhost 走向全世界,把專案部署到雲端。
圖片描述
圖片一:SSH 連線架構示意圖
建議位置:要點一章節內
圖片規格:
- 尺寸:1200 x 675 px
- 格式:WebP
- 檔名:ssh-connection-architecture.webp
視覺內容描述:
左側顯示「SSH Client」方塊,包含終端機圖示。中間是一條帶有鎖頭圖示的加密連線線。右側顯示「SSH Server」方塊,包含伺服器圖示。下方有箭頭標示資料流向,並標註「Port 22」和「加密傳輸」。整體使用深色科技風格背景,連線使用亮色(綠色或藍色)表示安全加密。
Alt 文字:SSH Client 透過加密連線連接到 SSH Server 的架構示意圖
圖片二:三大作業系統 SSH 啟用對照
建議位置:要點二、三、四章節的開頭作為總覽
圖片規格:
- 尺寸:1200 x 800 px
- 格式:WebP
- 檔名:os-ssh-setup-comparison.webp
視覺內容描述:
三欄式設計,分別標示 Windows、Mac、Linux 的圖示和名稱。每欄包含三個步驟的簡化圖示:1. 安裝/啟用(齒輪圖示)2. 啟動服務(播放按鈕圖示)3. 測試連線(打勾圖示)。Windows 欄強調「選用功能」和「services.msc」。Mac 欄強調「系統偏好設定」和「遠端登入」。Linux 欄強調「apt/dnf install」和「systemctl」。底部有共通的測試命令:ssh username@localhost。
Alt 文字:Windows、Mac、Linux 三種作業系統的 SSH 伺服器啟用步驟對照
圖片三:SSH 金鑰認證流程圖
建議位置:要點六章節內
圖片規格:
- 尺寸:1200 x 675 px
- 格式:WebP
- 檔名:ssh-key-authentication-flow.webp
視覺內容描述:
流程圖設計,顯示金鑰認證的四個步驟。Step 1:產生金鑰對(顯示私鑰和公鑰圖示)。Step 2:公鑰放到伺服器的 authorized_keys(箭頭從公鑰指向伺服器)。Step 3:連線時伺服器用公鑰加密挑戰(鎖頭加密圖示)。Step 4:客戶端用私鑰解密並回傳(解鎖圖示)。最後顯示「驗證成功,允許登入」的打勾符號。整體使用流程圖風格,每個步驟用不同顏色區分。
Alt 文字:SSH 金鑰認證的四步驟流程:產生金鑰對、複製公鑰、加密挑戰、私鑰解密
圖片四:SSH Tunnel 運作原理圖
建議位置:要點八章節內
圖片規格:
- 尺寸:1200 x 675 px
- 格式:WebP
- 檔名:ssh-tunnel-diagram.webp
視覺內容描述:
分成三個區域的示意圖。左側是「本機」區域,包含瀏覽器圖示連接到 localhost:8080。中間是「SSH Tunnel」區域,用一個管道形狀表示加密通道,內部有鎖頭符號。右側是「遠端」區域,顯示 SSH 伺服器連接到內部資料庫(MySQL 圖示)。整體流向用箭頭表示:瀏覽器 → 本機 port → SSH Tunnel → 遠端 → 內部服務。下方有文字說明「Local Port Forwarding: 透過 SSH 安全存取遠端服務」。
Alt 文字:SSH Tunnel 本地轉發示意圖,展示流量如何透過加密通道存取遠端服務