Win11 啟用 OpenSSH Server
在 Unix 系統(如 Ubuntu)中啟用 OpenSSH Server 是很容易的,在 Windows 上啟用要稍微複雜一些。本文記錄一下在 Windows 上啟用 OpenSSH Server 的過程和可能遇到的問題。
新增 OpenSSH Server 功能
Win11 預裝了 OpenSSH Client,但沒有預裝 OpenSSH Server,因此必須首先安裝這個功能。根據 https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse 來新增 OpenSSH Server 功能。這篇教程雖然是針對 Windows 伺服器版撰寫的,但對 Windows 11 專業版同樣可用。
注意,在新增功能之後還要在服務中啟用它。注意設定開機自動啟動。
下面是我的電腦上沒有任何連線(空閒)時的 sshd 服務:
本機連線測試
ssh [使用者名稱]@localhost
如果看到以下內容:
The authenticity of host 'localhost' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?
說明 SSH 伺服器已經執行起來。
設定防火牆
Windows 預設的防火牆規則可能不允許來自區域網的裝置連線本機的 SSH 伺服器。在 Windows 安全中心(即 Windows Defender)中找到“防火牆和網路保護”,點選進入,找到“高階設定”,點選進入,將彈出一個新視窗。
在左側點選“入站規則”,在列表中找到“OpenSSH SSH Server (sshd)”,如果它沒有啟用(左側沒有綠色對勾圖示),那麼右鍵啟用它。這條規則是在前面新增 OpenSSH Server 功能時自動建立的,我這裡預設只允許了“公用”網路,發現區域網裡仍然連線不上,於是在屬性中勾選了“專用”網路,就可以連線了。
解決 ping 不通的問題
另外你可能發現用區域網的其他裝置 ping 本機是不通的(超時),這是因為 Windows 防火牆預設禁用了 ICMP。要解決這個問題,仍然是在上面的防火牆規則視窗中找到“”,啟用這些規則。我不清楚“專用”“公用””域“之間的區別,因此把下圖的 4 個規則全部啟用了,啟用之後可以 ping 通。
當然,ping 是否接通和 SSH 沒有關係。這一步不是必須的。
解決公鑰登入方式不起作用的問題
Windows 的 OpenSSH Server 的預設配置中,authorized_keys
檔案的位置和 Unix 系統有所不同。這可能會導致按照 Unix 方法配置公鑰登入(即將登入裝置的公鑰放進 ~/.ssh/authorized_keys
中)後,嘗試登入仍然被要求提供密碼。為了解決這一問題,可以修改 OpenSSH Server 的配置檔案(位置:C:\ProgramData\ssh\sshd_config
),註釋掉下面這兩行(通常位於該檔案的最後):
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
然後重啟(需要在管理員許可權的終端中執行)sshd:
Restart-Service sshd
修改登入 Shell
Windows 的 OpenSSH Server 的預設登入 Shell 是 CMD(甚至不是 PowerShell)。如果希望修改,需要以管理員許可權開啟 PowerShell,執行
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force
此處將登入 Shell 改成了 Git Bash。如果希望改成其他 Shell,可以修改其中的 "C:\Program Files\Git\bin\bash.exe"
部分。我改成了 NuShell,體驗良好。
參考
https://blog.cloudorz.com/post/configure-openssh-server-on-windows-with-private-key-authentication/
https://github.com/felix-cao/Blog/issues/206
https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse