Windows – OpenSSH Server

測試環境為 Windows 10 – 1809 (虛擬機)

SSH 使用非對稱式 與 對稱式加密來確保遠端連線的安全性,有興趣參考這一篇 – http://benjr.tw/301

從 Windows Server 2019 與 Windows 10 1809 就提供可獨立安裝的 OpenSSH 用戶端和 OpenSSH 伺服器元件.參考 https://docs.microsoft.com/zh-tw/windows-server/administration/openssh/openssh_install_firstuse 說明.

Windows SSH Server + PowerShell

  • 圖形安裝
    Windows Setting / Apps

    App / features / Manager Optional features

    Add a feature

    安裝 OpenSSH Server 與 Client (已經安裝)

    啟動 Service / Open SSH Server (預設沒有啟動)
  • 指令安裝
    可以直接透過 PowerShell 來安裝,以下顯示已經安裝過了.

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    PS C:\Windows\system32> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
    
    Name  : OpenSSH.Client~~~~0.0.1.0
    State : Installed
    
    Name  : OpenSSH.Server~~~~0.0.1.0
    State : Installed
    

    除了透過剛剛圖形介面安裝外,可以透過以下指令來安裝.
    安裝 OpenSSH Client ,需 Administrator 權限,需選擇 Windows PowerShell (admin) 來執行以下指令.

    PS C:\Windows\system32> Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    

    安裝 OpenSSH Server

    PS C:\Windows\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    

    移除 OpenSSH Client

    PS C:\Windows\system32> Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    

    移除 OpenSSH Server

    PS C:\Windows\system32> Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    

    啟動 SSHD 服務 (預設沒有啟動).

    PS C:\Windows\system32> Start-Service sshd
    PS C:\Windows\system32> Set-Service -Name sshd -StartupType 'Automatic'
    

    SSH 使用 TCP Port(埠) 22

    PS C:\Windows\system32> Get-NetFirewallRule -Name *ssh*
    
    Name                  : OpenSSH-Server-In-TCP
    DisplayName           : OpenSSH SSH Server (sshd)
    Description           : Inbound rule for OpenSSH SSH Server (sshd)
    DisplayGroup          : OpenSSH Server
    Group                 : OpenSSH Server
    Enabled               : True
    Profile               : Any
    Platform              : {}
    Direction             : Inbound
    Action                : Allow
    EdgeTraversalPolicy   : Block
    LooseSourceMapping    : False
    LocalOnlyMapping      : False
    Owner                 :
    PrimaryStatus         : OK
    Status                : The rule was parsed successfully from the store. (65536)
    EnforcementStatus     : NotApplicable
    PolicyStoreSource     : PersistentStore
    PolicyStoreSourceType : Local
    
    PS C:\Windows\system32> New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
    
    Name                  : sshd
    DisplayName           : OpenSSH Server (sshd)
    Description           :
    DisplayGroup          :
    Group                 :
    Enabled               : True
    Profile               : Any
    Platform              : {}
    Direction             : Inbound
    Action                : Allow
    EdgeTraversalPolicy   : Block
    LooseSourceMapping    : False
    LocalOnlyMapping      : False
    Owner                 :
    PrimaryStatus         : OK
    Status                : The rule was parsed successfully from the store. (65536)
    EnforcementStatus     : NotApplicable
    PolicyStoreSource     : PersistentStore
    PolicyStoreSourceType : Local
    
  • 測試
    就直接 Windows 自己透過 SSH Client 連自己的 SSH Server

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    PS C:\Windows\system32> ipconfig
    
    Windows IP Configuration
    
    Ethernet adapter Ethernet0:
    
       Connection-specific DNS Suffix  . : localdomain
       Link-local IPv6 Address . . . . . : fe80::bd62:6acb:bf4d:cebe%16
       IPv4 Address. . . . . . . . . . . : 192.168.111.137
       Subnet Mask . . . . . . . . . . . : 255.255.255.0
       Default Gateway . . . . . . . . . : 192.168.111.2
    
    PS C:\Windows\system32> ssh 192.168.111.137
    The authenticity of host '192.168.111.137 (192.168.111.137)' can't be established.
    ECDSA key fingerprint is SHA256:pcexQltm6wAk9xlb3i1TOu/S3k2jIvdFgCmZJNYDOY0.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.111.137' (ECDSA) to the list of known hosts.
    ben@192.168.111.137's password:
    Microsoft Windows [Version 10.0.17763.1098]
    (c) 2018 Microsoft Corporation. All rights reserved.
    
    ben@DESKTOP-18MHRKT C:\Users\ben>
    

    剛剛選擇 yes 則表示 SSH client 接受 SSH server 的公開金鑰並且新增到本機系統的 ssh 主機清單裡.

Windows SSHD + PowerShell

預設透過 SSH 連到 Windows 是到 Windows 的 CMD (Command Line),有辦法直接連到 PowerShell 嗎?
參考 – https://docs.microsoft.com/zh-tw/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7
可以的需要安裝 PowerShell 7 的版本,請先至 https://github.com/PowerShell/PowerShell/releases 下載並安裝.

執行以下指令需 Administrator 權限,需選擇 Windows PowerShell (admin) 來執行.

編輯 C:\ProgramData\ssh\sshd_config 檔案.
確定使用密碼驗證(預設值)

PasswordAuthentication yes

指定遠端電腦上使用 SSH 啟動 PowerShell 子系統,需注意 c:/progra~1/ (因為 C:\Program Files 包含空格的檔案路徑需使用 8.3 簡短名稱來取代) ,c:/progra~1/powershell/7/pwsh.exe 這是 PowerShell 7 的預設路徑.

Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo -NoProfile

需使用指令把 Powershell 預設 SHELL 設定為 PowerShell 7 (C:\Program Files\PowerShell\7\pwsh.exe)

PS C:\Windows\system32> New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force

DefaultShell : C:\Program Files\PowerShell\7\pwsh.exe
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE
PSChildName  : OpenSSH
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

需重新啟動 SSHD 服務.

PS C:\Windows\system32> Restart-Service sshd

測試
就直接 Windows 自己透過 SSH Client 連自己的 SSH Server

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Windows\system32> ipconfig

Windows IP Configuration

Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix  . : localdomain
   Link-local IPv6 Address . . . . . : fe80::bd62:6acb:bf4d:cebe%16
   IPv4 Address. . . . . . . . . . . : 192.168.111.137
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.111.2
PS C:\Windows\system32> ssh 192.168.111.137
PowerShell 7.0.2
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/powershell
Type 'help' to get help.

PS C:\Users\ben>
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料