在Windows上使用OpenSSH安装SFTP(SSH FTP)服务器

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

我们可以使用Windows的官方OpenSSH软件包,使用" SFTP"("安全FTP")协议轻松组织客户端和Windows服务器之间的安全文件传输。在本文中,我们将展示如何使用Win32-OpenSSH在Windows 10或者Windows Server 2015/2012 R2上运行SFTP服务器。

什么是SFTP?

" SFTP"("安全""文件传输协议","安全FTP"或者" SSH FTP")是SSH协议的扩展,是UNIX/Linux系统中的标准。从用户的角度来看,它与FTP相似,但实际上,它是一个完全不同的协议,与FTP没有任何共同之处。数据通过SSH隧道(TCP端口22)在客户端和服务器之间传输。

SFTP的主要优点:

  • 文件和命令在安全的SSH会话中传输;
  • 一种连接用于发送文件和命令;另一种用于发送文件和命令。
  • 支持符号链接,中断/继续传输,文件删除功能等;
  • 通常,在FTP速度慢或者出现故障的通道中,SFTP连接会更快,更可靠。
  • 可以使用SSH密钥进行身份验证。

不要混淆SFTP和FTPS协议。 FTPS本质上只是具有SSL证书的简单FTP,而SFTP是在SSH会话内发送FTP数据和命令的协议。

Windows中的SFTP实施

从历史上看,Windows操作系统不提供任何内置工具来运行安全的SFTP服务器。为此,已经使用了开源或者专有解决方案,例如Core FTP,FileZilla,CYGWIN,OpenSSH,FTP Shell,IPSwitch等。但是,几年前,Microsoft为Win32发布了其版本的OpenSSH端口。该项目称为" Win32-OpenSSH"。

让我们考虑使用Win32 OpenSSH软件包对运行Windows 10或者Windows Server 2019/2015/2012 R2的SFTP服务器的配置。

在Windows 10 1803 +/Windows Server 2019上安装Win32 OpenSSH

在Windows 10 build 1803和更高版本中以及在Windows Server 2019中,OpenSSH软件包已经以像RSAT之类的按需功能(FoD)的形式包含在操作系统中。

我们可以使用以下PowerShell cmdlet在Windows 10和Windows Server 2019上安装OpenSSH服务器:

Add-WindowsCapability -Online -Name OpenSSH.Server*

或者使用DISM:

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

我们也可以从Windows 10 GUI添加OpenSSH服务器(设置->应用->可选功能->添加功能->打开SSH服务器->安装)。

  • OpenSSH可执行文件位于目录中:
c:\windows\system32\OpenSSH\

;

  • sshd_config配置文件位于目录中:
C:\ProgramData\ssh

(此目录是在sshd服务首次启动后创建的);

  • 日志文件:
c:\windows\system32\OpenSSH\logs\sshd.log

;

  • authorized_keys文件和密钥存储在目录中:
%USERPROFILE%\.ssh\

现在,我们可以像在Linux中一样通过SSH连接到Windows 10.

在Windows Server 2015/2012 R2上安装Win32 OpenSSH

在Windows 10的早期版本和Windows Server 2015/2012 R2中,必须从GitHub(https://github.com/PowerShell/Win32-OpenSSH/releases)下载并安装OpenSSH。我们需要下载Windows x64的软件包版本:OpenSSH-Win64.zip(3.5 MB)。

  • 将存档解压缩到目标目录:C:\OpenSSH-Win;
  • 启动提升的PowerShell CLI并切换到OpenSSH文件夹:
Cd C:\OpenSSH-Win
  • 将OpenSSH目录的路径添加到Path环境变量(系统属性->高级选项卡->环境变量->选择并编辑Path系统变量->将路径添加到OpenSSH文件夹);
  • 安装OpenSSH服务器:
.\install-sshd.ps1

(绿色消息应显示为sshd,并且已成功安装ssh-agent服务);

  • 为服务器生成SSH密钥(需要启动sshd服务):
ssh-keygen.exe –A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
  • 为SSHD服务启用自动启动,并使用以下PowerShell服务管理命令启动它:
Set-Service -Name sshd -StartupType ‘Automatic’
Start-Service sshd
  • 重启你的电脑:
Restart-Computer
  • 使用PowerShell在Windows防火墙中打开TCP端口22,以接收传入的SSH通信:
 New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH

注意先前的命令在旧的桌面Windows版本中将不起作用。在这种情况下,将使用另一个命令:

 netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22
  • 在任何文本编辑器中打开SSHD配置文件(C:\ProgramData\SSH\sshd_config)。查找并检查Subsystem sftp指令的值。 sftp-server.exe文件应在此处指定。

我们还可以在sshd_config配置文件中配置以下参数:

AllowGroups corp\sftp_users #

仅允许该域组中的用户连接到OpenSSH

AuthenticationMethods password #

启用密码验证(无法使用SSH密钥)

ForceCommand internal-sftp
ChrootDirectory C:\inetpub\wwwroot\ftpfolder #

SFTP用户的默认目录

使用WinSCP测试SFTP连接

让我们尝试使用SFTP协议连接到创建的SSH服务器。为此,请使用免费的" WinSCP"客户端。

在连接配置窗口中,选择" SFTP"作为文件传输协议,指定服务器名称和Windows帐户的凭据(用于连接)(也可以配置密钥身份验证)。

首次尝试连接时,将显示以下有关在本地缓存中未找到的主机密钥的通知。

如果一切配置正确,则客户端将连接到SFTP服务器,并在用户主目录(默认情况下,它是带有用户配置文件的目录)中显示文件列表。

使用熟悉的文件管理器界面(例如Total Commander),可以在服务器和客户端之间复制文件。使用安全的SFTP传输文件。

如何卸载Win32 OpenSSH?

要从系统中正确卸载Win32 OpenSSH,请执行以下操作:

  • 运行提升的PowerShell会话;
  • 停止SSHD服务:
Stop-Service sshd
  • 卸载sshd服务:
.\uninstall-sshlsa.ps1
sshd successfully uninstalled
ssh-agent successfully uninstalled