用OpenSSH 配置 SFTP 服务器 (OpenSSH for Windows)

前言

通过IIS配置了FTP服务器,无法满足公司IT的安全性要求,按理说FTP+SSL证书也是安全的,但是IT要求只能用SFTP,无力反抗则第一时间查csdn和github.于是乎找到了openSSH这一神器.其实win10 18H1之后和Windows Server 2019 是自带安装功能,这部分不再细说. 可参考微软官网

适用于 Windows 的 OpenSSH 概述 | Microsoft Learn

Installing SFTP/SSH Server on Windows using OpenSSH :: WinSCP

无奈手头这台服务器是Windows Server 2012,以64bit为例,所以只能手动按部就班进行安装,安装步骤记录如下:

网上的资源从来只说一半,花点时间整理一篇完整版,希望对各位有用。

第一步:github网站下载压缩包

https://github.com/PowerShell/Win32-OpenSSH/releases

以64为系统为例,选择OpenSSH-Win64.zip链接下载即可.如果没有github账户(我担心那一天被封了,论及时备份的重要性),也可到我的资源里面进行下载。https://download.csdn.net/download/ericwuhk/12821190

第二步:将压缩包解压至C:\Program Files\OpenSSH-Win64,并在此目录下执行cmd指令

1#控制台调用powershell->In an elevated Powershell console, run the following 

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

2#防火墙开端口22->Open the firewall for sshd.exe to allow inbound SSH connections 

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

Note: New-NetFirewallRule is for Windows 2012 and above servers only. If you're on a client desktop machine (like Windows 10) or Windows 2008 R2 and below, try:

netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

3#启动sshd-> Start sshd (this will automatically generate host keys under %programdata%\ssh if they don't already exist) 

net start sshd

 4#若要卸载则执行

cd 'C:\Program Files\OpenSSH'
powershell.exe -ExecutionPolicy Bypass -File uninstall-sshd.ps1

运行过程大致截图如下:

第三步 建立ftp账户和密码

我的电脑右键管理-》电脑管理

第四步 配置ftp目录

找到配置文件C:\ProgramData\ssh\sshd_config 系统可能会隐藏 ,结尾加上分割线以下这一段

#=============================================

#Add Below

ForceCommand internal-sftp

 
Match User ftpuser

ChrootDirectory E:\sites\sftp

# Disable tunneling, authentication agent, TCP and X11 forwarding.

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

PermitTTY no	

第五步 使用客户端验证

至此是SFTP已经配置完毕.用FileZilla client在本地机器上(192.168.0.2)运行检测发觉功能正常.

至此,大功告成?你想多了,我的工作才刚刚开始。接下来要写一份ftp客户端又选择性的从服务器上down而文件下来。

不过幸好已经有案底,会参考以下来进行修改,养成时常记录整理的好习惯,码到用时方恨少!

 用于同步服务器文件的一款FTPS 客户端工具开发_ftp文件同步工具_Antony_WU_SZ的博客-CSDN博客

好了,合上笔记本下班回家!

后续问题:

可以把Start sshd加到开机启动项中,不然服务器每次重启之后需要手动执行net start sshd

在服务器中 Win+R 输入 gpedit.msc

Start sshd as admin.bat 如下:

@echo off
:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------  

net start sshd

如果使用putty进行远程登录时,需要注意修改以下配置,否则远程功能可能收到影响

使用putty建立隧道进行远程访问目标机_putty ssh隧道_Antony_WU_SZ的博客-CSDN博客

#ForceCommand internal-sftp
AllowTcpForwarding yes