Localhost SSH 連線教學|本機遠端連線設定

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:

  1. 開啟「設定」→「應用程式」→「選用功能」
  2. 搜尋「OpenSSH」
  3. 查看是否已安裝「OpenSSH 用戶端」和「OpenSSH 伺服器」

安裝 OpenSSH 伺服器

如果沒有安裝「OpenSSH 伺服器」:

  1. 在「選用功能」頁面,點選「新增功能」
  2. 搜尋「OpenSSH」
  3. 勾選「OpenSSH 伺服器」
  4. 點選「安裝」
  5. 等待安裝完成

或者使用 PowerShell(以系統管理員身份執行):

# 檢查 OpenSSH 可用功能
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

# 安裝 OpenSSH 伺服器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

啟動 SSH 服務

安裝完成後,需要啟動 SSH 服務:

方法一:透過服務管理員

  1. Win + R,輸入 services.msc,按 Enter
  2. 找到「OpenSSH SSH Server」
  3. 右鍵 →「啟動」
  4. 如果想開機自動啟動,右鍵 →「內容」→ 啟動類型改為「自動」

方法二:使用 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 伺服器預設是關閉的。

啟用遠端登入

方法一:透過系統偏好設定

  1. 開啟「系統偏好設定」→「共享」
  2. 勾選「遠端登入」
  3. 選擇允許存取的使用者(「所有使用者」或「僅限以下使用者」)

啟用後,系統會顯示你的電腦名稱和 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

可能原因與解決方案

  1. SSH 服務未啟動
    - Windows:執行 Start-Service sshd
    - Mac:系統偏好設定啟用「遠端登入」
    - Linux:執行 sudo systemctl start ssh

  2. 防火牆阻擋
    - 確認防火牆允許 22 port

  3. SSH 監聽不同 port
    - 檢查 sshd_config 中的 Port 設定

問題二:Permission denied

錯誤訊息

Permission denied (publickey,password).

可能原因與解決方案

  1. 密碼錯誤
    - 確認輸入正確的使用者密碼

  2. 使用者不允許 SSH 登入
    - 檢查 sshd_config 中的 AllowUsersDenyUsers

  3. 密碼認證被禁用
    - 確認 sshd_configPasswordAuthentication yes

  4. 金鑰認證失敗
    - 確認 ~/.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:

  1. 「設定」→「應用程式」→「選用功能」
  2. 搜尋「OpenSSH」
  3. 安裝「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 走向全世界,把專案部署到雲端。

幫我上線


圖片描述

圖片一: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 本地轉發示意圖,展示流量如何透過加密通道存取遠端服務

分享文章:
V

VibeFix

專門解決 AI Vibe Coding 後的疑難雜症,讓你的專案順利上線。

這篇文章有幫到你嗎?

如果還有問題,讓我們直接幫你解決!

聯繫我們