測試環境為 VMWare 虛擬機
- Windows 10 – 1809
- Linux CentOS 7
- macOS Catalina
SSH 使用非對稱式 與 對稱式加密來確保遠端連線的安全性,有興趣參考這一篇 – https://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 Client 與 Server
- 圖形安裝
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 ServerWindows 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
當沒有指定使用者時,使用目前使用者名稱來登入(預設無法使用 administrator 登入).
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 主機清單裡.
可以指定使用者來登入,其他如 Linux 與 macOS 指令使用方式皆相同.
C:\Users\ben>ssh ben@192.168.111.137 ben@192.168.111.137's password:
預設無法使用 administrator 登入.
C:\Users\ben>ssh administrator@192.168.111.137 Connection reset by 192.168.111.137 port 22
Windows SSH Server + PowerShell
預設透過 SSH 連到 Windows 是到 Windows 的 CMD ( Command Line ),有辦法 SSH 連線到 Windows 時就直接是 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
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>
或是指定使用者來登入,其他如 Linux 與 macOS 指令使用方式皆相同.
PS C:\Windows\system32> ssh ben@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>
好詳細 感謝
但我很腦 密碼一開始打錯 =不知怎半@@