直到最近,如果您想在 Windows 上使用 SSH,您需要依賴 PuTTY 等第三方客戶端或從類似來源安裝 SSH 服務器包。
但是,2018 年 4 月的更新(版本 1803)引入了 OpenSSH 作為內置功能。只要您運行的是受支持的 Windows 版本,您就可以將 OpenSSH 客戶端和服務器組件作為可選功能安裝。
因此,我們將介紹使用各種方法安裝 OpenSSH 的先決條件和完整步驟,以及如何在本文中開始使用它。
如何安裝 OpenSSH
在開始之前,您需要確保滿足以下要求:
可選功能(GUI)
在 Windows 上安裝 OpenSSH 的最簡單方法是從 Windows 設置中的可選功能頁面。
按 Win + I 並轉到應用 > 可選功能.點擊“添加可選功能”部分中的查看功能。
從列表中選擇 OpenSSH Client 和 OpenSSH Server,然後按 Next > Install。

組件安裝完成後,按Win + R,鍵入 services.msc,然後按 Enter。在此處找到 OpenSSH SSH 服務器 和 OpenSSH 身份驗證代理 服務。
雙擊它們並啟動這些服務。如果需要,您還可以將啟動類型更改為自動。之後保存更改。
接下來,按 Win + R,鍵入 wf.msc,然後按 Enter。在入站規則部分,確保啟用 OpenSSH SSH 服務器 (sshd) 規則。
基本設置已完成。查看開始使用 OpenSSH 部分以了解更多步驟。如果需要,您也可以按照相同的步驟卸載 OpenSSH。
PowerShell
如果您想提高效率,也可以在提升的 PowerShell 窗口中執行與上述相同的步驟。
按 Win + R,鍵入 powershell,然後按 CTRL + Shift + 輸入。首先,確保 OpenSSH 組件可用:
Get-WindowsCapability-Online |對象名稱-如“OpenSSH*”
接下來,安裝 OpenSSH 客戶端和服務器組件:
Add-WindowsCapability-Online-Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability-Online-Name OpenSSH.Server~~ ~~0.0.1.0
啟動 sshd 和 ssh-agent 服務並將它們的啟動類型更改為自動,如下所示:
Set-Service-Name sshd-StartupType’Automatic’-Status Running
Set-Service-Name ssh-agent-StartupType’自動’-運行狀態
接下來,為 SSH 流量配置必要的 Windows 防火牆規則:
New-NetFirewallRule-Name’OpenSSH-Server-In-TCP’-DisplayName’OpenSSH Server (sshd)’-Enabled True-Direction Inbound-Protocol TCP-操作允許-LocalPort 22
現在設置已完成,您可以開始使用 SSH。如果您需要這方面的幫助,請參閱 OpenSSH 入門部分。另外,如果你想卸載 OpenSSH 組件,這裡是必要的命令:
Remove-WindowsCapability-Online-Name OpenSSH.Client~~~~0.0.1.0
Remove-WindowsCapability-Online-Name OpenSSH.Server ~~~~0.0.1.0
GitHub (MSI)
如果您下載了 OpenSSH來自 GitHub 的包,您可以使用 MSI 安裝程序和 msiexec/i
例如,如果文件在您的當前目錄中,請使用
msiexec/i openssh.msi 如果文件在,比方說,你的下載文件夾,使用
msiexec/i C:\users\anup\downloads\openssh.msi 要卸載 OpenSSH,使用
msiexec/x
msiexec/i openssh.msi ADDLOCAL=Client
msiexec/i openssh.msi ADDLOCAL=Server
msiexec/i openssh.msi REMOVE=Client
msiexec/i openssh.msi REMOVE=Server
安裝組件後,按照以下步驟更新系統 PATH 變量:
按 Win + R,鍵入 systempropertiesadvanced,然後按 Enter。點擊環境變量。在系統變量部分,選擇路徑並點擊編輯。
在此處檢查 %systemroot%\System32\openssh。如果不存在,請單擊新建並將其添加到列表中。請注意,這是默認安裝路徑。如果您在不同的路徑上安裝了 OpenSSH,請相應地更改此步驟的值。
按 Ok > Ok 保存更改。
現在,您可以在 PowerShell 中運行 Get-Service-Name ssh* 來驗證組件是否已正確安裝。如果您還需要啟動所需的服務或打開端口,請參考前面的任何一個部分的步驟。
最後,如果您想使用其他方法,例如 Winget 或 Chocolatey,我們建議您查看GitHub 上的 OpenSSH wiki。除了安裝說明之外,它還有各種您可能會覺得有用的使用示例和手冊。
OpenSSH 服務器配置
默認情況下,Windows 中的 OpenSSH 服務器 (sshd) 讀取來自 %programdata%\ssh\sshd_config 的配置數據。此文件中列出了許多配置選項,但由於 OpenSSH 的 Windows 實現仍然相當新,目前僅支持某些配置。
我們在下面列出了一些常用的配置更改以供參考。我們建議檢查 OpenSSH 服務器配置Microsoft 的指南 或 GitHub 上的指南 獲取完整列表選項。另外,不要忘記重新啟動 sshd 服務以應用所做的任何更改。
如果要更改 SSH 端口,請取消註釋 Port 行並更改值。您還需要添加防火牆規則以允許所述端口上的入站流量。
如果您只想監聽特定的 IP 地址,請將 ListenAddress 從 0.0.0.0 更改為其他內容。如果要收聽多個 IP 地址,請以相同的方式添加多個 ListenAddress 行。如果您想使用 Kerberos 身份驗證,請將 GSSAPIAuthentication 更改為 yes。添加AllowGroups、AllowUsers、DenyGroups和DenyUsers指令來控制哪些組和用戶可以訪問SSH服務器.如果使用域用戶和組,請查看以下格式參考示例:
DenyUsers tnt\[email protected]
DenyUsers tnt\*
AllowGroups tnt\sshclients tnt\serveradmins 如果處理工作組用戶和組,請改為檢查這些示例:
AllowUsers [email protected]
AllowGroups sshclients 最後,您可以在 PowerShell 中使用以下命令將默認 OpenSSH shell 設置為 PowerShell 而不是命令提示符:
New-ItemProperty-Path”HKLM:\SOFTWARE\OpenSSH”-Name DefaultShell-Value”C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”-PropertyType String-Force
開始使用 OpenSSH
您可以使用上面列出的任何方法來設置另一個 Windows 系統作為 OpenSSH 客戶端、服務器或兩者。如果您是 SSH 新手,這裡有一些基本的入門步驟:
首先,按 Win + R,鍵入 sysdm.cpl,然後按 Enter。在此處檢查您是否是工作組或域用戶。
按 Win + R,鍵入 powershell,然後按 Enter。如果您是工作組用戶,請輸入以下命令並跳至第 6 步:
ssh user@host
如果您是域用戶,請輸入以下任一命令:
ssh-l user@domain host
ssh domain\user@host
ssh user@domain@host
ssh user@host
首次登錄時,您必須確認主機是可信的。如果您輸入是,該主機將被添加到已知主機列表中。
現在,輸入主持人帳戶的密碼,然後按 Enter。
基於密碼的身份驗證通常很好,但理想情況下,您應該使用更安全的身份驗證方法,如 Kerberos 和 SSH 密鑰。對於 Kerberos,請按照下面列出的步驟操作:
在加入域的服務器上,導航到 %programdata%\ssh\。使用文本編輯器打開 sshd_config 文件。取消註釋 GSSAAPIAuthentication 行,將其設置為yes,然後保存更改。
在 Powershell 中,使用以下命令重新啟動 sshd 服務並應用上面的更改:
net stop sshd
net啟動 sshd
現在,在以域用戶身份登錄的 Windows 客戶端上,輸入 ssh-K 主機名。
使用 SSH 密鑰進行身份驗證
跨域連接時,不建議使用基於密碼的身份驗證,因為它容易受到暴力破解。相反,您應該使用公鑰身份驗證。它使用密碼算法生成一公一私鑰文件。
用戶的公鑰存儲在SSH服務器上,與客戶端私鑰進行比對進行身份驗證。只要私鑰保護得當,這種認證方式的安全性要高得多。
您需要在客戶端系統生成密鑰對,在服務器端創建授權密鑰文件,並存儲此文件中的客戶端公鑰。為此,請在服務器系統上執行以下步驟:
按 Win + R,鍵入 powershell,然後按 CTRL + Shift + Enter。創建 administrators_authorized_keys 文件。對於管理員組中的用戶:
New-Item-Type File-Path C:\ProgramData\ssh\administrators_authorized_keys 對於標準用戶:
New-Item-Type File-Path C:\Users\username\.ssh \administrators_authorized_keys 在我們的例子中,我們使用管理員帳戶創建了文件。如果您使用的是標準帳戶,請在其餘命令中相應地更改文件路徑。使用以下命令設置密鑰文件的訪問權限:
get-acl C:\ProgramData\ssh\ssh_host_dsa_key | set-acl C:\ProgramData\ssh\administrators_authorized_keys
現在,在客戶端系統上啟動一個 Elevated PowerShell 窗口並按照以下步驟操作:
使用 cd ~/.ssh 進入.ssh 目錄並生成使用 ssh-keygen 的密鑰對。
當提示輸入文件位置時,按 Enter 使用默認值:
C:\Users\username\.ssh\ 添加如果您想進一步提高其安全性,請為您的私鑰設置密碼。
現在,陳獲取 user 和 host 值並運行如下所示的命令。它將客戶端的公鑰附加到服務器上的授權密鑰文件中。 $public_key=Get-Content ~/.ssh/id_rsa.pub ssh user@host”‘$($public_key)’| Out-File C:\ProgramData\ssh\administrators_authorized_keys-Encoding UTF8-Append”
輸入您的密碼以批准操作。現在,您將能夠使用公鑰身份驗證進行連接。
排查常見錯誤
諸如端口 22 連接被拒絕或連接超時之類的 SSH 錯誤非常常見。如果您按照本文中的步驟進行操作,那麼基本步驟(例如確保 SSH 服務正在運行、重新啟動它們、允許 SSH 流量通過防火牆、將 SSH 添加到系統 PATH 等)都已包含在內。
除了這些之外,這裡還有一些值得嘗試的故障排除步驟:
首先,確保上述步驟也在遠程系統上完成。重試並確保您輸入了正確的憑據。使用主機的 IP 地址而不是主機名。如果可行,請通過刷新緩存或使用不同的服務器來解決 DNS 問題。 Ping 主機以確保沒有丟包。檢查服務器的 sshd_config 文件中的 SSH 端口 和 ListenAddress。使用詳細標誌(ssh-v 或 ssh-vvv)來獲取有關問題所在的更多詳細信息。