使用内置的OpenSSH服务器通过SSH连接Windows

时间:2020-01-09 10:46:17  来源:igfitidea点击:

Windows 10 1809和Windows Server 2019具有基于OpenSSH的内置SSH服务器。在本文中,我们将展示如何在Windows10上安装和配置OpenSSH服务器,并通过受保护的SSH协议远程连接到它(就像在Linux中一样)。

我们也可以在以前的Windows版本中安装OpenSSH服务器,但必须从GitHub手动下载并安装OpenSSH for win32 port(https://github.com/powershell/Win32-OpenSSH). 如何在Windows上安装和配置SFTP服务器(SSH-FTP)一文中给出了如何安装和配置win32openssh的示例。

如何在Windows上安装OpenSSH服务器?

让我们看看如何在Windows101903上安装OpenSSH服务器特性(在WindowsServer2019中,过程是相同的)。

OpenSSH包(如RSAT)作为 Feature on Demand(FoD)添加到这些(和更新的)Windows版本中。

如果我们可以直接访问Internet,则可以使用PowerShell安装OpenSSH:

Add-WindowsCapability -Online -Name OpenSSH.Server*

或者使用DISM:

dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

我们也可以通过 设置面板在Windows10上安装OpenSSH(应用程序->应用程序和功能->管理可选功能->添加功能)。在列表中找到 打开SSH服务器,点击 安装

要确保已安装OpenSSH服务器,请运行以下命令:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed

在Windows 10/Windows Server 2019上配置SSH服务器

在Windows中安装OpenSSH服务器后,必须将 sshd服务启动类型更改为自动,并使用PowerShell启动服务:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

使用netstat,确保SSH服务器正在运行并等待TCP端口22上的连接:

netstat -na| find ":22"

确保Windows Defender防火墙允许通过TCP端口22到Windows的入站连接:

Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled
---- ----------- ----------- ------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True

如果规则已禁用(Enabled=False)或者丢失,则可以使用new NetFirewallRule cmdlet创建新的入站规则:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

默认情况下,重要的OpenSSH组件位于以下文件夹中:

OpenSSH服务器可执行文件:

C:\Windows\System32\OpenSSH\

sshd_config文件(在第一次服务启动后创建):

C:\ProgramData\ssh

OpenSSH日志:

C:\windows\system32\OpenSSH\logs\sshd.log

授权密钥文件和密钥:

%USERPROFILE%\.ssh\

安装OpenSSH后,将在计算机上创建一个新的本地用户(sshd)。

OpenSSH服务器配置文件(sshd_config)

我们可以在配置文件中更改OpenSSH服务器设置:%programdata%\ssh*sshd_config* 。

例如,要拒绝特定域用户帐户(或者所有域用户)的SSH连接,请将以下指令添加到文件末尾:

DenyUsers theitroad\[email protected]
DenyUsers corp\*

要仅允许SSH连接到特定的域组,请执行以下操作:

AllowGroups theitroad\sshadmins

也可以允许访问本地组:

AllowGroups sshadmins

我们可以拒绝对具有管理员权限的帐户的访问。在这种情况下,如果需要在SSH会话中执行任何特权操作,则必须使用runas。

DenyGroups Administrators

以下指令允许使用RSA密钥和密码进行SSH访问(我们将在下一篇文章中详细介绍如何使用RSA密钥通过SSH访问Windows):

PubkeyAuthentication yes
PasswordAuthentication yes

我们可以在sshd_config文件的port指令中更改OpenSSH接收连接的端口。