Guides

Windows 開啟 OpenSSH Server:只允許金鑰登入、只走 Tailscale


操作手冊 ・更新於

重點整理

用系統管理員 PowerShell 安裝 OpenSSH Server 功能並設成自動啟動;在 sshd_config 關掉 PasswordAuthentication 之外,KbdInteractiveAuthentication 也要關,否則還是能用密碼登入;防火牆規則只放行 Tailscale 的 100.64.0.0/10。帳號在 Administrators 群組時,公鑰要放 C:\ProgramData\ssh\administrators_authorized_keys,且檔案權限只能留 Administrators 與 SYSTEM,否則金鑰登入會失敗又沒有錯誤訊息。Windows 11 家用版也能裝。

要從另一台電腦遠端管理 Windows 筆電,最單純的方式是開 SSH。這份整理依我們 2026 年 11 月替公司一台 Windows 11 家用版筆電設定的過程:只接受金鑰、只從 Tailscale 內網連入。指令以 Windows PowerShell 為準。

安裝元件、改系統設定、防火牆規則都會改變系統安全設定,要由電腦的使用者本人開系統管理員視窗並按 UAC 確認。

這份手冊適合誰

  • 要從 Mac 或 Linux 用 SSH 管理 Windows 電腦的人。
  • 電腦已經裝好 Tailscale,想讓 SSH 只在 Tailscale 內網開放、不對外。

先確認 Windows 版本與狀態

  1. 開始 → 輸入 winver,看 Windows 版本。Windows 11 家用版也有內建的 OpenSSH Server 功能,我們這台就是家用版 25H2。
  2. 在一般 PowerShell 執行 Get-Service sshd:
    • 出現「找不到任何服務名稱為 'sshd' 的服務」代表還沒裝。
    • 執行 net session 出現「存取被拒」,代表目前不是系統管理員視窗,後面的步驟都要改用系統管理員視窗。
關於 Windows 視窗:Windows 11 版本 25H2,家用版作業系統
一般 PowerShell 視窗:get-service 找不到 sshd 服務,net session 回應存取被拒

開啟系統管理員 PowerShell

  1. 開始 → 搜尋 PowerShell → 在「Windows PowerShell」按右鍵 →「以系統管理員身分執行」。
  2. 使用者帳戶控制(UAC)視窗按「是」。
  3. 確認視窗標題是「系統管理員: Windows PowerShell」。
開始選單搜尋 PowerShell,在 Windows PowerShell 上按右鍵,選單第一項是以系統管理員身分執行
使用者帳戶控制視窗:詢問是否允許 Windows PowerShell 變更裝置,按是繼續

安裝 OpenSSH Server 並設成自動啟動

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Set-Service sshd -StartupType Automatic
Start-Service sshd
  • 安裝要從 Windows Update 下載元件。我們這台花了約 25 分鐘;進度條跑完後還會停一陣子才結束,這是正常的。
  • 第一次啟動 sshd 時,系統會建立設定檔 C:\ProgramData\ssh\sshd_config 和主機金鑰。
系統管理員 PowerShell 安裝 OpenSSH Server 中,畫面顯示 Operation Running 進度條

關掉密碼登入,只收金鑰

  1. 先備份設定檔:
    Copy-Item C:\ProgramData\ssh\sshd_config C:\ProgramData\ssh\sshd_config.bak
    
  2. 用記事本(系統管理員身分)開 C:\ProgramData\ssh\sshd_config,確認以下四行存在且沒有被 # 註解:
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PubkeyAuthentication yes
    PermitEmptyPasswords no
    
  3. 檢查設定檔語法,沒有輸出就是正確:
    & "$env:WINDIR\System32\OpenSSH\sshd.exe" -t
    

🔴 只關 PasswordAuthentication 不夠。 我們第一次只關了這一項,從別台測試時伺服器仍然提供 keyboard-interactive 登入方式,等於還能輸入密碼。要把 KbdInteractiveAuthentication 也設成 no。

防火牆只放行 Tailscale 網段

SSH 用的防火牆規則名稱是 OpenSSH-Server-In-TCP(允許 TCP 22)。先確認規則存在,沒有就建立,再把來源限制在 Tailscale 使用的 100.64.0.0/10:

if (-not (Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -ErrorAction SilentlyContinue)) {
  New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
}
Set-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -RemoteAddress '100.64.0.0/10' -Profile Any -Enabled True
Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' | Get-NetFirewallAddressFilter

這樣即使筆電接在公共網路上,SSH 也只接受 Tailscale 內網連入。

設定完成後的輸出:sshd_config 為 KbdInteractiveAuthentication no、PubkeyAuthentication yes、PasswordAuthentication no,防火牆來源限制為 100.64.0.0/255.192.0.0

放入公鑰(系統管理員帳號要放對位置)

Windows 版 OpenSSH 的預設設定裡有一段 Match Group administrators:

  • 帳號在 Administrators 群組:只讀 C:\ProgramData\ssh\administrators_authorized_keys,不讀使用者目錄下的 .ssh\authorized_keys。
  • 一般帳號:讀 C:\Users\<帳號>\.ssh\authorized_keys。

系統管理員帳號的做法:

  1. 把要連入那台電腦的公鑰(ssh-ed25519 … 開頭的一行)加進 C:\ProgramData\ssh\administrators_authorized_keys。只放公鑰,私鑰不要複製過來。
  2. 把檔案權限收到只剩 Administrators 與 SYSTEM:
    icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'
    
  3. 重新啟動 sshd:
    Restart-Service sshd
    

這個檔案的權限如果多了其他使用者,金鑰登入會直接失敗、畫面上不會有任何錯誤。照上面的 icacls 收權限就不會遇到。

從另一台電腦驗證

在同一個 Tailscale 網路的另一台電腦執行:

  1. 金鑰登入成功:
    ssh <Windows 帳號>@<Windows 的 Tailscale IP> "whoami"
    
    回傳 電腦名稱\帳號 就代表成功。第一次連線會詢問或提示加入 known hosts,屬正常。
  2. 確認不能用密碼:
    ssh -o PreferredAuthentications=password,keyboard-interactive -o PubkeyAuthentication=no <帳號>@<IP>
    
    只能回 Permission denied (publickey)。如果還出現輸入密碼的提示,回頭檢查 KbdInteractiveAuthentication。

Tailscale 沒連線時

SSH 只開放給 Tailscale 網段,所以 Tailscale 沒連上時就連不進來:

  • 我們這台的 Tailscale 設定是:有人登入 Windows 後自動連線,鎖定畫面不影響。
  • 重開機後還沒有人登入的這段時間不會連線。需要在這段時間也能連時,可以在 Tailscale 開「Run unattended」。我們這台是隨身筆電,所以沒有開。

常見問題

Windows 11 家用版可以裝 OpenSSH Server 嗎?

可以。家用版也有內建的 OpenSSH Server 功能,用系統管理員 PowerShell 執行 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 安裝。

已經設 PasswordAuthentication no,為什麼還能輸入密碼?

Windows 版 OpenSSH 還會提供 keyboard-interactive 登入方式。要在 sshd_config 也設 KbdInteractiveAuthentication no,重新啟動 sshd 後再測一次。

Windows 系統管理員帳號用金鑰登入一直失敗?

帳號在 Administrators 群組時,公鑰要放在 C:\ProgramData\ssh\administrators_authorized_keys,不是使用者目錄的 .ssh\authorized_keys;而且這個檔案的權限只能留 Administrators 與 SYSTEM,否則會靜默失敗。

怎麼讓 Windows 的 SSH 只能從 Tailscale 連?

把防火牆規則 OpenSSH-Server-In-TCP 的來源位址設為 100.64.0.0/10(Tailscale 使用的網段)。這樣即使在公共網路上,也只有 Tailscale 內網的裝置連得進來。

回到頂部 作品集 服務項目 知識文章 產品服務 聯絡我們
Lab Space