從前,你在使用 Windows PowerShell 進行遠程連接時,只能連接到特定類型的電腦。因為 PowerShell 遠程連接只支援 WsMan 提供者,所以你無法連接到運行 Linux 系統的電腦。然而在 2015 年,微軟推出了對 SSH 的支援,這為你帶來了更多可能性,最終讓你能夠同時使用 SSH 和 PowerShell。
在本文中,我們將深入探討如何設置 Windows 的 SSH 客戶端,以及如何利用 SSH 和 PowerShell 遠程連接。
這篇 SSH 和 PowerShell 文章是 #PS7Now 博客系列的一部分。請務必在本文底部查看所有其他貢獻者的文章。
開始之前
本文將提供一個逐步教程。如果你打算跟隨操作,請確保符合以下先決條件:
- Windows 10 – 所有示例将使用Windows 10 Build 1903。示例将在与远程Windows Server相同的域中。
- 已在Windows 10上安装PowerShell v6+ – 所有示例将使用PowerShell 7 RC2。
- A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
- 远程服务器上可用的TCP端口22
SSH客户端(Windows 10)设置
在打开PowerShell控制台之前,您首先需要执行一些一次性任务,以确保SSH和PowerShell能够协同工作,以确保Windows 10可以连接到远程SSH服务器。
将OpenSSH文件夹添加到PATH环境变量
OpenSSH已预装在Windows 10上,但有时需要一点帮助才能与PowerShell远程管理配合使用。如果您已经尝试使用Enter-PSSession
连接到远程SSH系统,并遇到以下错误,请确保在PATH 环境变量中指定了OpenSSH可执行文件(ssh.exe)的路径。
要將OpenSSH文件夾的路徑添加到PATH環境變量中,請點擊”開始”按鈕,然後搜索”進階系統設置”,再點擊”查看進階系統設置”,如下所示。

當”系統內容”窗口彈出時,點擊”環境變量”按鈕。

在”環境變量”窗口中,在”系統變量”下,選擇”Path”,然後點擊”編輯”。

在”編輯環境變量”窗口中,點擊”新建”,然後輸入”ssh.exe”可執行文件所在的路徑。本教程中,該路徑為”C:\Program Files\OpenSSH”,如下所示。輸入完成後,點擊兩次”確定”保存新值。

指定SSH子系統
現在,您需要為PowerShell指定SSH子系統,以在遠程Windows Server上通過SSH連接時調用。如果您沒有告訴PowerShell使用哪個子系統,您將不可避免地收到以下錯誤:
Enter-PSSession:背景處理報告了一個錯誤,錯誤信息如下:SSH客戶端會話以錯誤消息結束:在通道0上子系統請求失敗。
請注意,如果您不連接到Windows Server機器,則不需要執行這些步驟。
在遠程的 Windows 伺服器上,開啟 C:\ProgramData\ssh\ssh_config 檔案。往下捲動到 override default of no subsystems 部分的 ssh_config 檔案。該部分會如下的螢幕截圖所示。

在現有的 Subsystem 行下方,使用以下行添加 PowerShell 子系統:
現在保存 ssh_config 檔案,並在遠程的 Windows 伺服器上重新啟動 sshd Windows 服務,如下所示。
服務重新啟動後,您現在應該能夠通過 SSH 和 PowerShell 進行連接。
通過 PowerShell 和 SSH 進行連接
現在配置完成,試試 PowerShell 遠程操作。
首先,嘗試使用 Enter-PSSession
命令進入交互式會話。不同於您習慣的方式,您將 不使用 ComputerName
參數。而是使用 HostName
參數指定遠程電腦。
預設情況下,PowerShell 遠程操作仍然使用 WsMan。要覆蓋默認設置,請使用 SSHTransport
參數指示您希望通過 SSH 和 PowerShell 進行連接。
當您首次使用使用者名稱和密碼進行連接時,您需要創建一個 SSH 私鑰。在提示時,請輸入 ‘y’ 接受。

然後,您將被要求輸入您當前登錄的使用者的密碼。
請注意,此示例中的Windows 10客戶端和Windows Server SSH服務器位於同一個Active Directory域中。默認情況下,PowerShell Remoting將嘗試使用登錄的用戶進行身份驗證。您還可以使用
參數指定不同的用戶名和密碼。
提供密碼後,您應該會看到熟悉的PowerShell Remoting提示符。

現在退出會話使用exit
,然後嘗試使用New-PSSession
。注意下面使用與之前相同的HostName
和SSHTransport
參數,現在Transport
顯示為SSH
。
您還可以使用ComputerName
參數而不使用SSHTransport
參數來使用WsMan作為傳輸協議。
您不需要使用SSH的用戶名和密碼。您可以使用私鑰文件並使用
KeyFilePath
參數指定其位置。

不要忘記使用Get-PSSession | Remove-PSSession
清理打開的會話!
總結
您現在應該知道如何設置Windows 10和Windows Server以使用PowerShell Remoting進行SSH。一旦配置完成,使用WsMan作為傳輸協議和使用SSH之間的唯一區別就是一些參數!
如果您想了解更多關於PowerShell和SSH的內容,請務必查看PowerShell Remoting over SSHMicrosoft的文檔文章。
#PS7Now 貢獻者
本文是關於PowerShell 7系列的一部分,由下面優秀的貢獻者撰寫。請務必查看他們的文章並關注他們的部落格!
Author | Blog | |
---|---|---|
Josh King | @WindosNZ | https://toastit.dev/ |
Adam Bertram | @adbertram | https://adamtheautomator.com/ |
Jonathan Medd | @jonathanmedd | |
Thomas Lee | @doctordns | https://tfl09.blogspot.com/ |
Prateek Singh | @singhprateik | https://ridicurious.com |
Dave Carroll | @thedavecarroll | https://powershell.anovelidea.org/ |
Dan Franciscus | @dan_franciscus | https://winsysblog.com/ |
Jeff Hicks | @jeffhicks | https://jdhitsolutions.com |
Josh Duffney | @joshduffney | http://duffney.io/ |
Mike Kanakos | @MikeKanakos | https://www.networkadm.in/ |
Tommy Maynard | @thetommymaynard | https://tommymaynard.com// |