在Windows上设置SFTP服务器

SFTP服务器允许我们通过SSH文件传输协议(一种安全的网络协议)来访问其文件和内容。在我们的操作系统环境中,我们可以设置SFTP服务器,使我们能够检索和发送资源。

本文将讨论使用WinSCP软件在Windows上设置SFTP服务器。

为老式Windows设置SFTP服务器

要在Windows上设置SFTP服务器,你需要安装OpenSSH,你可以从PowerShell GitHub下载。你可以查看这个用于Linux环境的安装指南。

你可以下载msizip 文件,但我们在本文中只使用msi 文件。

  • 安装msi 文件。之后,进入Services ,并检查OpenSSH serverOpenSSH Authentication Agent 的状态。

    在Windows上设置SFTP服务器

  • 如果StatusStartup Type 不是runningAutomatic ,右键点击这两个服务,选择Properties

    在Windows上设置SFTP服务器

  • Startup type 改为Automatic ,点击Start ,并选择OK

    在Windows上设置SFTP服务器

  • OpenSSH Authentication Agent 做同样的操作;现在,两个服务应该是RunningAutomatic

    在Windows上设置SFTP服务器

为较新的Windows设置SFTP服务器

  • 对于较新的Windows,你可以到Settings > Apps > Optional Features ,获得OpenSSH。

    在Windows上设置SFTP服务器

  • 选择View Features 并在Add an optional feature 对话框中搜索OpenSSH server

    在Windows上设置SFTP服务器

  • 选择OpenSSH server 复选框选项,然后点击Install

    在Windows上设置SFTP服务器

  • 之后,使用下面的PowerShell命令配置SSH服务器,允许进入服务器的连接。
    New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program "C:\Windows\System32\OpenSSH\sshd.exe"
    
  • 在Windows上设置SFTP服务器

  • 在Windows服务的列表中找到OpenSSH server

    在Windows上设置SFTP服务器

  • 右键单击该服务,并选择Properties

    在Windows上设置SFTP服务器

  • Startup type 改为Automatic ,点击Start ,并选择OK

    在Windows上设置SFTP服务器

  • OpenSSH Authentication Agent 做同样的操作;现在,两个服务都应该是RunningAutomatic

    在Windows上设置SFTP服务器

使用WinSCP来设置和配置SFTP客户端

WinSCP是一个仅限GPL-3.0的软件,可以免费使用和修改。它允许我们进行不同协议的安全文件传输,包括SSH文件传输和Amazon S3。

它只适用于Windows,可以从其下载页面下载。

  • 下载后,运行安装程序文件,并选择首选的Install Mode

    在Windows上设置SFTP服务器

  • 接受许可协议,并选择Typical Installion 选项。

    在Windows上设置SFTP服务器

  • 选择你喜欢的用户界面风格,但在本文中我们将使用Commander

    在Windows上设置SFTP服务器

  • 之后,点击Install ,启动WinSCP 应用程序。

    在Windows上设置SFTP服务器

  • 启动后,你应该看到一个类似于下面的屏幕。

    在Windows上设置SFTP服务器

  • 填入主机名;使用localhost 。使用默认的端口号22 ,并填写你的计算机的名称和密码。之后,点击Login 按钮。

    在Windows上设置SFTP服务器

  • 将出现下面的屏幕对话框,你必须选择Yes

    在Windows上设置SFTP服务器

  • 如果成功,你应该看到下面的屏幕。

    在Windows上设置SFTP服务器

  • 如果不成功,你可能会看到下面这样的对话框,因为你的OpenSSH 服务没有运行,你需要启动前面所说的两个OpenSSH 服务。

    在Windows上设置SFTP服务器

  • 现在,我们可以使用ssh-keygen 命令设置基于公钥的认证。
    ssh-keygen
    

    该命令的输出如下。

    Generating public/private rsa key pair.
    Enter file in which to save the key (C:Usersakinl/.ssh/id_rsa):
    Created directory 'C:Usersakinl/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in C:Usersakinl/.ssh/id_rsa.
    Your public key has been saved in C:Usersakinl/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:Ryrpy5HHTT1NK2OFzT3NjoIwORbzNV7/BfBfPLhHCEk akinl@Olorunfemi-PC
    The key's randomart image is:
    +---[RSA 3072]----+
    |        o .E=.o  |
    |         = +.Bo*.|
    |        * o oo*+O|
    |       o * o +o=*|
    |      o S + B.+.+|
    |     . + + . =.  |
    |      + o .      |
    |     . +         |
    |      o          |
    +----[SHA256]-----+
    

    ssh-keygen 工具要求输入口令时,你可以输入一个口令,但我们在本文中不使用口令。ssh-keygen 创建了一个名为.ssh 的隐藏目录,并将密钥对保存在id_rsa.pub 文件中的.ssh

    公钥的完整路径是C:Usersakinl/.ssh/id_rsa.pub

    在Windows上设置SFTP服务器

    公钥是id_rsa.pub 文件,而私钥是id_rsa

  • 在Windows上设置SFTP服务器

  • 在你的.ssh 目录中至少应该有三个文件(authorized_keys,id_rsa, 和id_rsa.pub) 。

    在Windows上设置SFTP服务器

  • 为了保证authorized_keys 文件的安全,并且只有管理员或核心用户才能访问,你必须配置Access Control List (ACL) 。使用下面的命令来配置访问控制。
    icacls.exe "C:Users<username>.sshauthorized_keys" /inheritance:r /grant "Adminstrators:F" /grant "SYSTEM:F"
    
  • <username> 改为你的用户名。
    icacls.exe "C:Usersakinl.sshauthorized_keys" /inheritance:r /grant "Adminstrators:F" /grant "SYSTEM:F"
    

    该命令的输出:

    processed file: C:Usersakinl.sshauthorized_keys
    Successfully processed 1 file; Failed processing 0 files
    
  • 因此,如果你现在打开同一个authorized_keys 文件,你应该看到下面的对话框。

    在Windows上设置SFTP服务器

  • 为了完全配置SFTP服务器,我们需要编辑sshd_config 文件来设置基于公钥的认证;sshd_config 文件在ProgramData 目录中。将下面的完整路径复制到Windows Explorer中,并打开sshd_config 文件
    C:ProgramDatassh
    

    sshd_config 文件是该目录内的最后一个文件。

    在Windows上设置SFTP服务器

  • 通过取消注释或改变你的sshd_config 文件中包含配置信息的行来进行修改。同时,将sshd_config 文件作为Administrator
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication no
    PermitEmptyPasswords no
    Subsystem sftp internal-sftp
    Match User <username>
    	X11Forwarding no
    	AllowTcpForwarding no
    	PermitTTY no
    	ForceCommand internal-sftp
    	PasswordAuthentication no
    

    此外,确保将<username> 改为你的用户名。此外,你可以对文件内的以下配置信息进行注释。

    Match Group administrators
    	   AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
    
  • 对你的ssh_config 文件的修改应该如下图所示:

    在Windows上设置SFTP服务器

  • 现在,让我们用以前的用户名和密码登录方法打开WinSCP。

    在Windows上设置SFTP服务器

    它不再被支持了,因为我们已经改变了配置文件,只支持公钥认证。现在要登录,我们需要使用我们的公钥。

  • 不要使用Password ,而是点击Advanced 按钮。

    在Windows上设置SFTP服务器

  • 转到SSH 下的Authentication 标签。

    在Windows上设置SFTP服务器

  • Authentication parameters 区域下,浏览私钥文件,进入.ssh 目录(C:Usersakinl.ssh),并将文件选项改为All Files

    在Windows上设置SFTP服务器

  • 选择id_rsa 文件,应该会提示下面的对话框。请选择OK

    在Windows上设置SFTP服务器

    之后,应该会出现下面的对话框。

    在Windows上设置SFTP服务器

  • 然后,点击OK

    在Windows上设置SFTP服务器

  • 现在,点击Login

    在Windows上设置SFTP服务器

    现在,你可以使用公钥认证来访问SFTP服务器了。

    在Windows上设置SFTP服务器