使用外網穿透 ssh 命令連接 windows 時:ssh username@ip:port,提示:Connection reset by peer;
轉爲使用內網連接來查找問題,在內網中,使用 ssh 連接時,提示:Operation timed out;
接着,使用命令 ping ip 時,提示:Request timeout for icmp_seq;
google後發現是防火牆的問題,打開 windows 防火牆後, 能 ping 通,但用 ssh 連接時,提示:port 22:Connection refused.
參考博客:如何使用 SSH 控制連接 Windows 服務器 解決問題。
1. 在設置->應用->應用和功能->可選功能裏,發現只安裝了 OpenSSH Clinet,沒有安裝 OpenSSH Server,
接下來通過 shell 工具 PowerShell 來安裝 OpenSSH Server,因爲可選功能裏只有 OpenSSH Client,沒有 OpenSSH Server,
(1)在安裝 PowerShell 並用管理員啓動後(類似於 DOS 界面),輸入:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
提示:
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
(2)用 PowerShell 安裝 OpenSSH Server:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
[如果讀條完成之後,沒反應,按回車鍵]
此時,再次輸入:
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 Server 安裝成功。
(3)重點來了:重啓!重啓!重啓!重要的事情說三遍,不然後續的命令都會提示找不到。
(4)在完成 OpenSSH Server 的安裝之後,用管理員打開 PowerShell 執行界面,開啓 sshd 服務(無提示):
Start-Service sshd
並設爲自動啓動(無提示):
Set-Service -Name sshd -StartupType 'Automatic'
(5)驗證防火牆是否允許 OpenSSH 服務通過:
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 : 已從存儲區成功分析規則。 (65536)
EnforcementStatus : NotApplicable
PolicyStoreSource : PersistentStore
PolicyStoreSourceType : Local
Enable 狀態是 True,Action 狀態是 Allow,表示允許通過,OpenSSH 可用。
2. 內網遠程連接:ssh username@ip,成功。
在安裝 OpenSSH Sever 之前,嘗試關閉 Windows 防火牆,並在防火牆高級設置中添加入站規則,允許通過 port: 22 進行連接,並沒有解決問題,安裝 OpenSSH Sever 之後,開啓防火牆,並刪除入站規則,發現不影響連接[疑惑~];之後發現是:Windows Defender 防火牆->允許應用或功能通過 Windows Defender 防火牆,其中 OpenSSH 已添加到列表。