盘诚文摘好记性不如烂博客

Windows中使用OpenSSH实现SFTP


什么是SFTP

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

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

SFTP优点:

  1. 文件和命令在安全的SSH会话中传输;
  2. 一个连接用于发送文件和命令。
  3. 支持符号链接,中断/恢复传输,文件删除功能等;
  4. 通常,在FTP速度慢或出现故障的通道中,SFTP连接会更快,更可靠。
  5. 使用SSH密钥进行身份验证的可能性。Windows中的SFTP实施

关于OpenSSH

Windows操作系统不提供任何内置工具来运行安全的SFTP服务器。为此,可以使用开源或专有的解决方案,例如:Core FTP,FileZilla,CYGWIN,OpenSSH,FTP Shell,IPSwitch等。

OpenSSH 是安全 Shell (SSH) 工具的开放源代码版本,Linux 及其他非 Windows 系统的管理员使用此类工具跨平台管理远程系统。 OpenSSH 在 2018 年秋季已添加至 Windows,并包含在 Windows 10 和 Windows Server 2019 中。

SSH 基于客户端-服务器体系结构,用户在其中工作的系统是客户端,所管理的远程系统是服务器。 OpenSSH 包含一系列组件和工具,用于提供一种安全且简单的远程系统管理方法,其中包括:

  • sshd.exe,它是远程所管理的系统上必须运行的 SSH 服务器组件
  • ssh.exe,它是在用户的本地系统上运行的 SSH 客户端组件
  • ssh-keygen.exe,为 SSH 生成、管理和转换身份验证密钥
  • ssh-agent.exe,存储用于公钥身份验证的私钥
  • ssh-add.exe,将私钥添加到服务器允许的列表中
  • ssh-keyscan.exe,帮助从许多主机收集公用 SSH 主机密钥
  • sftp.exe,这是提供安全文件传输协议的服务,通过 SSH 运行
  • scp.exe 是在 SSH 上运行的文件复制实用工具

在Windows Server 2019上安装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服务器->安装)。具体步骤,可以参考微软文档:https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse

win-openssh

  • OpenSSH可执行文件位于以下目录中:c:\windows\system32\OpenSSH\
  • sshd_config的配置文件位于:C:\ProgramData\ssh(sshd服务的第一次启动后,将创建该目录)
  • 日志文件:c:\windows\system32\OpenSSH\logs\sshd.log
  • authorized_keys文件和密钥存储在目录:%USERPROFILE%\.ssh\

在Windows Server 2016/2012上安装OpenSSH

在Windows Server 2016或2012中,可以从GitHub(https://github.com/PowerShell/Win32-OpenSSH/releases)下载并安装OpenSSH 。

  1. 将存档解压缩到目标目录:c:\OpenSSH-Win
  2. 启动提升的PowerShell CLI并切换到OpenSSH文件夹:cd c:\OpenSSH-Win
  3. 将OpenSSH目录的路径添加到Path环境变量(系统属性->高级选项卡->环境变量->选择并编辑Path系统变量->将路径添加到OpenSSH文件夹);

win-openssh

4.安装OpenSSH服务器:(.\install-sshd.ps1绿色消息应显示“sshd和ssh-agent服务已成功安装”);

win-openssh

5、为服务器生成SSH密钥(需要启动sshd服务):

ssh-keygen.exe –A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519

win-openssh

6、为SSHD服务启用自动启动,然后使用以下PowerShell服务管理命令启动它:

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

7、重启你的电脑:

Restart -Computer

8、使用PowerShell在Windows防火墙中打开TCP端口22,以接收传入的SSH通信:

New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH

win-openssh

9、在任何文本编辑器中打开SSHD配置文件(C:\ProgramData\SSH\sshd_config)。在SFTP-SERVER.EXE文件中,查找并检查Subsystem sftp指令的值。

win-openssh

转载:感谢您对盘诚格志博客网站的认可,以及对盘诚原创文章和文摘的青睐。若引用、转载或分享到个人网站或者朋友圈,请注明出处及作者信息,不甚感激!盘诚保留所有最终解释权。

扫一扫分享本页