Windows 電腦可以作為遠端開發節點或家用伺服器。本文整理公鑰登入、PowerShell 7、Windows Terminal 和筆電電源管理的設定方式,並說明管理員帳戶與 Modern Standby 的注意事項。
1. 設定 OpenSSH 公鑰登入
Windows OpenSSH 會依帳戶是否屬於本機 Administrators 群組,選擇不同的公鑰檔案:一般帳戶使用 ~/.ssh/authorized_keys;管理員帳戶預設使用 C:\ProgramData\ssh\administrators_authorized_keys。這是 Windows OpenSSH 的預設行為,設定前先確認自己使用哪一種帳戶。Microsoft OpenSSH 伺服器設定
1.1 設定管理員帳戶的公鑰檔案
以系統管理員身分開啟 PowerShell,將公鑰加入管理員帳戶共用的檔案:
$keys = "$env:ProgramData\ssh\administrators_authorized_keys"
notepad $keys
每把公鑰各佔一行。這個檔案的 ACL 應只授予 SYSTEM 和 Administrators 群組存取權:
icacls $keys /inheritance:r
icacls $keys /grant "Administrators:F" "SYSTEM:F"
Windows OpenSSH 服務會使用這個受限權限的檔案;不要把目前登入帳戶的個人權限加進這個管理員公鑰檔案。
1.2 設定一般帳戶的公鑰檔案
一般帳戶的公鑰放在自己的 .ssh 目錄。以下命令建立目錄與檔案,並移除繼承權限:
$sshDir = Join-Path $HOME ".ssh"
$keys = Join-Path $sshDir "authorized_keys"
New-Item -ItemType Directory -Path $sshDir -Force | Out-Null
New-Item -ItemType File -Path $keys -Force | Out-Null
notepad $keys
icacls $keys /inheritance:r
icacls $keys /grant:r "$($env:USERNAME):(F)" "SYSTEM:(F)"
將公鑰貼成單行並儲存。若要確認或修改 OpenSSH 的公鑰檔路徑,查看 %ProgramData%\ssh\sshd_config 中的 Match Group administrators 區塊;修改後以系統管理員身分重新啟動服務:
Restart-Service sshd
1.3 避免 UTF-8 BOM 造成解析問題
Windows PowerShell 5.1 的 -Encoding UTF8 會輸出帶 BOM 的 UTF-8;PowerShell 7 預設使用不帶 BOM 的 UTF-8。為了讓 authorized_keys 保持純文字且相容,PowerShell 7 可明確指定 utf8NoBOM;Windows PowerShell 5.1 可用 .NET 寫入不帶 BOM 的 UTF-8。PowerShell 字元編碼說明
PowerShell 7:
# $keys 指向 1.1 或 1.2 節選定的 authorized_keys 檔案。
(Get-Content "$HOME\.ssh\id_ed25519.pub" -Raw).Trim() |
Set-Content $keys -Encoding utf8NoBOM
Windows PowerShell 5.1:
# $keys 指向 1.1 或 1.2 節選定的 authorized_keys 檔案。
$publicKey = (Get-Content "$HOME\.ssh\id_ed25519.pub" -Raw).Trim()
[System.IO.File]::WriteAllText(
$keys,
$publicKey + [Environment]::NewLine,
[System.Text.UTF8Encoding]::new($false)
)
2. 將 PowerShell 7 設為 OpenSSH 預設 Shell
Windows Terminal 的預設設定只影響本機開啟的終端機。若要讓 SSH 連線進入 PowerShell 7,需在登錄中設定 OpenSSH 的 DefaultShell。先以系統管理員身分開啟 PowerShell,確認 pwsh.exe 的位置,再寫入登錄:
$pwshPath = (Get-Command pwsh.exe -ErrorAction SilentlyContinue).Source
if (-not $pwshPath) {
$pwshPath = "C:\Program Files\PowerShell\7\pwsh.exe"
}
New-Item -Path "HKLM:\SOFTWARE\OpenSSH" -Force | Out-Null
New-ItemProperty `
-Path "HKLM:\SOFTWARE\OpenSSH" `
-Name DefaultShell `
-Value $pwshPath `
-PropertyType String `
-Force
登出並重新連線後,SSH 工作階段會使用新的 Shell。若 pwsh.exe 安裝在其他位置,請將 $pwshPath 設為實際路徑。
3. 設定 Windows Terminal
Windows Terminal 的設定檔可以指定預設 Shell,也可以設定是否以系統管理員身分執行。先在 Windows Terminal 的設定介面建立或確認 PowerShell 7 設定檔,再將該設定檔的 GUID 設為 defaultProfile。例如:
{
"defaultProfile": "{YOUR-POWERSHELL-7-PROFILE-GUID}",
"profiles": {
"list": [
{
"guid": "{YOUR-POWERSHELL-7-PROFILE-GUID}",
"name": "PowerShell 7",
"commandline": "pwsh.exe",
"elevate": false
}
]
}
}
保留設定檔中其他欄位與設定檔,不要用這個精簡範例覆蓋整份 settings.json。elevate 設為 true 會讓該設定檔預設以系統管理員身分執行;日常開發通常應保留為 false。Windows Terminal 設定檔文件
4. 在 PowerShell 中使用 Git for Windows 附帶的 Vim
若已安裝 Git for Windows,可以直接呼叫它附帶的 Vim,不必把整個 Git\usr\bin 加進全域 PATH。先確認 Vim 的實際安裝路徑,再將函式加入 PowerShell 個人設定檔:
$vimPath = "C:\Program Files\Git\usr\bin\vim.exe"
if (-not (Test-Path $vimPath)) {
throw "Vim not found at $vimPath; update the path for this Git installation."
}
if (-not (Test-Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force | Out-Null
}
@"
function vim { & `"$vimPath`" `$args }
function vi { & `"$vimPath`" `$args }
"@ | Add-Content -Path $PROFILE
重新開啟 PowerShell,或執行 . $PROFILE 載入設定。若已建立過相同函式,先移除舊定義,避免重複追加。
若不再需要獨立安裝的 Vim,可以先確認套件 ID,再移除該套件:
winget list --id vim.vim
winget uninstall --id vim.vim
不要為了移除 Vim 而刪除不確定用途的目錄。
5. 將筆電設定為遠端節點
先執行 powercfg /a 查看電腦支援的睡眠狀態。若希望筆電合蓋後仍維持服務,請先確認散熱、供電和網路設備適合長時間運作。關閉睡眠會增加耗電與溫度,也不保證每台筆電在合蓋時都會維持網路連線。
5.1 設定合蓋動作與螢幕逾時
以下設定讓交流電供電時合蓋不採取動作、5 分鐘後關閉螢幕,並停用交流電供電時的閒置睡眠:
powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0
powercfg /change monitor-timeout-ac 5
powercfg /change standby-timeout-ac 0
powercfg /setactive SCHEME_CURRENT
如果也要在電池供電時合蓋不睡眠,可額外設定:
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0
powercfg /setactive SCHEME_CURRENT
不同電源計畫和裝置韌體可能提供不同選項。設定後請用 powercfg /query 檢查實際值,並在目標電源狀態下驗證 SSH 連線。
5.2 了解 Modern Standby 的網路行為
Modern Standby 的網路連線由 Windows 和裝置韌體共同管理;目前 Windows 版本會依電源狀態調整連線,不保證睡眠期間持續提供 SSH 或其他服務。舊的 CONNECTIVITYINSTANDBY 電源設定已不適用於 Windows 10 版本 2004 之後的 Modern Standby 平台,不要把它當成通用的常駐網路開關。Modern Standby 網路連線說明
可用以下命令確認睡眠狀態,並檢查系統電源報告中的待機連線資訊:
powercfg /a
powercfg /spr
網卡是否能在待機期間保持連線也取決於硬體能力與驅動程式;請參閱Modern Standby 驗證文件,並以實際裝置測試。若服務必須一直可用,請避免讓系統進入睡眠,或使用專為常駐服務設計的設備。
結語
這些設定涵蓋 Windows 遠端節點常見的幾個環節:
- 依帳戶類型使用正確的 OpenSSH 公鑰檔案與 ACL。
- 分清 SSH Shell 與本機 Windows Terminal 的設定。
- 透過 PowerShell 個人設定檔呼叫 Git for Windows 附帶的 Vim。
- 先檢查裝置的睡眠能力,再調整電源計畫並實機驗證待機網路。
參考資料
- OpenSSH Server 設定(Windows):
sshd_config、管理員公鑰檔案位置與 ACL。 - OpenSSH for Windows 的金鑰式驗證:公鑰檔案與金鑰管理方式。
- PowerShell 字元編碼:Windows PowerShell 5.1 與 PowerShell 7 的 UTF-8/BOM 行為。
- Windows Terminal 一般設定檔設定:
commandline與elevate等設定。 - PowerShell 設定檔:
$PROFILE的位置與用途。 - Powercfg 命令列選項:電源計畫與命令列參數。
- Modern Standby 網路連線:待機期間 Windows 管理網路連線的方式。
- Modern Standby 期間允許網路連線:
CONNECTIVITYINSTANDBY設定的值與適用範圍。 - Modern Standby 驗證概覽:使用
powercfg /a檢查裝置睡眠與網路能力。 - WinGet
list命令與 WinGetuninstall命令:檢查並移除已安裝的套件。