
1. 项目概述为什么要在Windows间折腾SFTP如果你和我一样经常需要在两台甚至多台Windows电脑之间倒腾文件肯定对以下几种场景深恶痛绝U盘插来拔去不仅麻烦还容易丢用QQ或微信传大文件速度慢不说还有大小限制共享文件夹设置起来权限复杂跨网络比如从公司电脑连回家里的电脑更是麻烦重重。这时候一个更专业、更通用的方案就显得尤为重要——那就是搭建一个SFTP服务器。SFTP全称SSH File Transfer Protocol可以简单理解为运行在SSH安全通道上的FTP。它最大的好处就是安全、通用、不受网络环境限制。你可能会问这不是Linux服务器上的标配吗没错但谁说Windows就不能拥有呢通过给Windows安装一个SSH服务器它就能摇身一变成为一个支持SFTP的文件服务器。然后再配合一个像WinSCP这样经典、免费的图形化SFTP客户端你就能像操作本地文件夹一样在两台Windows电脑之间安全、高效地拖拽文件了。这个组合方案尤其适合开发者在不同环境间同步代码、运维人员传输日志和配置文件、或者普通用户在家和公司电脑间备份重要文档。它绕开了各种网盘的速度限制和隐私担忧也避免了设置Windows复杂共享的繁琐。接下来我就带你从零开始手把手完成“在Windows上安装配置SSH/SFTP服务器”以及“使用WinSCP客户端进行连接和文件管理”的全过程并分享一些我踩过坑才总结出来的实战经验。2. 核心组件选型与原理浅析在动手之前我们得先搞清楚要用到的两个核心工具服务端的OpenSSH Server和客户端的WinSCP。理解它们是什么以及为什么选它们能让你在后续配置时心里更有底。2.1 服务端为什么是OpenSSH for Windows在Windows上实现SFTP服务本质上就是要在Windows上运行一个SSH服务器。SSH协议除了提供安全的远程命令行访问这就是我们常用来连接Linux服务器的ssh命令其子系统Subsystem就包含了SFTP。因此安装SSH服务器就等于同时获得了SFTP文件传输的能力。选型考量可供选择的Windows SSH服务器软件有不少比如老牌的freeSSHd、Bitvise SSH Server等。但我强烈推荐使用微软官方维护的OpenSSH for Windows。理由如下官方原生支持自Windows 10 1809和Windows Server 2019起OpenSSH客户端和服务器已作为可选功能集成在系统中。这意味着它和系统的兼容性最好更新维护有保障。完全免费开源没有授权费用没有用户数限制符合我们追求高性价比解决方案的初衷。高度标准化OpenSSH是业界事实上的标准其配置文件、密钥格式、认证方式与Linux/Unix世界完全一致。这降低了学习成本也使得跨平台管理变得统一。安全性有保障由微软和OpenSSH社区共同维护安全更新及时。所以我们的核心任务就是在作为服务器的Windows电脑上启用并配置OpenSSH Server这个Windows功能。2.2 客户端WinSCP的优势何在有了服务器我们还需要一个好用的客户端来连接它。虽然系统自带的scp命令或PowerShell也能用但对于图形化操作和复杂管理来说WinSCP是Windows平台下不二的选择。WinSCP的核心优势双面板操作经典的“资源管理器”风格界面本地文件和远程服务器文件并排显示拖拽即可上传下载直观高效。协议支持全面不仅支持SFTP我们的主角还支持SCP、FTP、FTPS以及WebDAV一个工具解决多种文件传输需求。集成文本编辑器可以直接双击远程服务器上的文本文件如代码、配置文件进行编辑保存后自动上传对开发者极其友好。会话管理可以保存服务器连接信息主机名、用户名、认证方式下次一键连接。命令行与脚本支持提供了winscp.com命令行工具可以集成到批处理脚本中实现自动化文件同步。免费且轻量软件本身免费安装包小运行资源占用低。简单来说WinSCP将专业的文件传输操作“傻瓜化”让SFTP用起来和操作本地硬盘一样简单。接下来我们就进入实战环节。3. 服务端搭建在Windows上安装与配置OpenSSH Server假设我们有两台电脑电脑AIP: 192.168.1.100将作为SFTP服务器电脑B将作为客户端使用WinSCP进行连接。以下操作均在电脑A上执行。3.1 安装OpenSSH服务器功能Windows 10/11 和 Windows Server 2019/2022的安装方式类似主要通过系统设置或PowerShell完成。方法一通过设置界面安装推荐新手按Win I打开“设置”。进入“应用” “可选功能”。点击右上角的“查看功能”按钮在Windows 11中可能是“添加可选功能”。在搜索框中输入“OpenSSH”。在结果列表中找到并勾选“OpenSSH 服务器”。点击“下一步”然后点击“安装”。系统会自动下载并安装该功能。方法二通过PowerShell安装更快捷以管理员身份打开PowerShell在开始菜单搜索“PowerShell”右键选择“以管理员身份运行”然后执行以下命令# 检查OpenSSH客户端和服务器是否已安装 Get-WindowsCapability -Online | Where-Object Name -like OpenSSH* # 安装OpenSSH服务器 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0安装完成后你会看到返回结果为Path和Online状态为True。注意在某些较早的Windows 10版本或Windows Server 2016上可能需要通过“添加角色和功能”向导来安装步骤会稍有不同。本文以现代Windows版本为主。3.2 启动并配置SSH服务器安装只是第一步我们还需要启动服务并进行基本配置。1. 启动SSH服务并设置开机自启在刚才的管理员PowerShell中依次执行以下命令# 启动SSH服务 Start-Service sshd # 将SSH服务设置为自动启动这样下次开机就会自动运行 Set-Service -Name sshd -StartupType Automatic # 确认服务状态是否为“Running” Get-Service sshd2. 配置Windows防火墙规则为了让其他电脑能访问到你的SSH服务器端口22需要在防火墙中放行。OpenSSH安装脚本通常会自动创建规则但为了保险我们可以手动确认或创建。# 检查是否存在名为“OpenSSH-Server-In-TCP”的防火墙规则 Get-NetFirewallRule -Name *ssh* # 如果不存在则创建一条新的入站规则通常安装时已自动创建此步可省略 New-NetFirewallRule -Name sshd -DisplayName OpenSSH Server (sshd) -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 223. 可选但重要修改SSH服务器配置SSH服务器的配置文件位于C:\ProgramData\ssh\sshd_config。用记事本需管理员权限或VS Code等编辑器打开它进行一些关键调整。允许密码认证默认可能是启用的。确保有一行是PasswordAuthentication yes。如果被注释以#开头或设置为no请取消注释或改为yes。这是为了初期测试方便后续建议改用密钥认证。指定SFTP子系统找到Subsystem sftp这一行。默认通常是Subsystem sftp sftp-server.exe保持默认即可这是SFTP服务的可执行文件路径。限制用户访问如果你不希望所有用户都能登录可以在文件末尾添加AllowUsers your_username将your_username替换为你的Windows用户名。这样只有该用户能通过SSH/SFTP连接。修改配置文件后必须重启SSH服务才能使更改生效Restart-Service sshd3.3 测试服务器是否就绪在电脑A上我们可以先自己连接自己测试服务是否正常。打开一个普通的PowerShell非管理员也行。输入命令ssh localhost首次连接会询问是否信任主机密钥输入yes。系统会提示你输入当前用户的密码。输入正确的Windows登录密码。如果成功你会看到命令行提示符发生变化进入了SSH会话。输入exit退出。这个测试验证了SSH服务本身运行正常。SFTP作为其子系统自然也准备好了。4. 客户端实战使用WinSCP连接与管理文件现在切换到电脑B我们将使用WinSCP连接到电脑A的SFTP服务。4.1 下载与安装WinSCP访问 WinSCP 官网搜索“WinSCP download”即可找到下载安装程序。建议选择“Installation package”版本。运行安装程序安装类型选择“Typical”典型安装即可。安装过程中界面风格建议保持默认的“Commander style”双面板资源管理器风格这对大多数用户最友好。4.2 创建并配置会话启动WinSCP会弹出“登录”对话框。文件协议选择“SFTP”。主机名填写服务器电脑A的IP地址例如192.168.1.100。如果你在同一局域网内且电脑A有主机名也可以尝试填写主机名。端口号保持默认的22。用户名填写电脑A上你想要用来登录的Windows用户名。例如你的电脑登录名是“John”。密码填写该用户对应的Windows登录密码。高级设置点击“高级”按钮切换到“SSH” “认证”页面。这里可以管理私钥文件如果你后续配置了密钥登录需要在这里指定.ppk格式的私钥。初次使用密码登录这里暂时不动。连接测试 填写完基本信息后可以先不点“登录”而是点“保存”。给这个会话起个名字比如“家里电脑A”。保存后在WinSCP主界面的会话下拉列表中就可以快速选择。 现在点击“登录”。首次连接会弹出“警告”窗口显示服务器的主机密钥指纹勾选“信任此主机并添加密钥到缓存”然后点“是”。如果用户名和密码正确你就能成功连接到电脑A了4.3 WinSCP核心操作指南连接成功后你会看到熟悉的双面板界面。左侧是你的本地电脑电脑B文件右侧是远程服务器电脑A的文件。上传/下载文件直接在左右面板之间拖拽文件或文件夹即可。你也可以右键点击文件选择“上传”或“下载”。文件管理支持新建文件夹、删除、重命名、复制、移动等所有常规操作和资源管理器无异。编辑远程文件双击右侧面板中的一个文本文件如.txt,.py,.htmlWinSCP会调用你本地配置的文本编辑器如NotepadVS Code打开它。编辑完成后保存WinSCP会自动将修改后的文件上传回服务器。这是开发者的神级功能同步文件夹菜单“命令” - “同步”功能非常强大。你可以选择本地和远程的目录进行双向、仅上传或仅下载的同步并可以预览差异。在远程终端中执行命令虽然WinSCP主打文件传输但它也集成了一个简单的命令行窗口。点击工具栏上的“打开终端”按钮可以快速在服务器上执行一些命令比如查看磁盘空间df -h而无需打开单独的SSH客户端。5. 进阶配置与安全强化基础的密码登录已经可以工作了但从安全和便利性角度我们还可以做得更好。5.1 使用密钥认证替代密码登录密钥认证比密码更安全且可以实现免密登录特别适合自动化脚本。步骤1在客户端电脑B生成密钥对打开WinSCP在登录对话框点击“工具” - “运行PuTTYgen”WinSCP内置了密钥生成工具。在PuTTYgen中点击“Generate”并晃动鼠标生成密钥。生成后在“Key comment”处添加注释如win10-laptop并设置一个“Key passphrase”密钥密码可为空但建议设置以增加一层保护。点击“Save private key”将私钥保存为.ppk格式文件例如my_key.ppk妥善保管。将“Public key for pasting into OpenSSH authorized_keys file”文本框中的全部内容复制出来。这是一行以ssh-rsa或ssh-ed25519开头的长字符串。步骤2在服务器电脑A部署公钥在电脑A上打开资源管理器在地址栏输入%USERPROFILE%并回车进入当前用户目录通常是C:\Users\你的用户名。检查是否存在.ssh文件夹。如果没有新建一个。进入.ssh文件夹用记事本打开或新建一个名为authorized_keys的文件注意没有后缀名。将步骤1中复制的公钥字符串完整地粘贴到authorized_keys文件中并保存。步骤3配置WinSCP使用密钥登录回到电脑B的WinSCP登录对话框。在“密码”输入框现在可以留空了。点击“高级”进入“SSH” - “认证”页面。在“私钥文件”处点击“...”按钮选择你刚才保存的my_key.ppk文件。点击“确定”保存设置。现在尝试连接如果设置了密钥密码WinSCP会提示你输入如果没设则会直接登录成功。成功后你可以在服务器端电脑A的sshd_config文件中将PasswordAuthentication改为no来彻底禁用密码登录提升安全性。5.2 修改默认端口与限制访问修改默认端口在公网或复杂内网环境中将默认的22端口改为一个非标准端口可以减少被自动化脚本扫描攻击的风险。在服务器电脑A上编辑C:\ProgramData\ssh\sshd_config。找到#Port 22这一行删除#注释符并将22改为其他端口例如2222。重启服务Restart-Service sshd。非常重要同时修改防火墙规则放行新的端口如2222。New-NetFirewallRule -Name sshd-custom -DisplayName OpenSSH Server (Custom Port) -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222在WinSCP客户端连接时将端口号从22改为你设置的新端口如2222。使用高级防火墙策略除了放行端口你还可以在Windows防火墙中创建更精细的规则例如只允许特定IP地址如公司IP段访问你的SSH端口这样安全性更高。6. 常见问题排查与实战心得在实际操作中你可能会遇到一些问题。这里我整理了几个最常见的坑和解决方法。6.1 连接失败问题速查表问题现象可能原因排查步骤与解决方案连接被拒绝1. SSH服务未运行。2. 防火墙阻止。3. 端口错误。1. 在服务器运行Get-Service sshd确认状态为“Running”。2. 暂时关闭服务器防火墙测试仅用于测试之后需重新配置规则。3. 确认WinSCP中填写的端口号与服务器sshd_config中的Port一致。身份验证失败1. 用户名或密码错误。2. 密钥认证配置有误。3. 用户未被允许登录。1. 仔细核对Windows用户名和密码注意大小写。2. 检查服务器authorized_keys文件格式是否正确一行一个公钥。3. 检查服务器sshd_config中是否有AllowUsers或DenyUsers限制。连接超时1. 网络不通。2. 服务器IP地址错误。3. 服务器关机或休眠。1. 从客户端ping一下服务器IP看是否能通。2. 确认服务器IP地址在服务器上用ipconfig命令查看。3. 确保服务器电脑处于开机和唤醒状态。服务器拒绝了密码服务器端禁用了密码认证。检查服务器sshd_config中PasswordAuthentication是否为no。如果是请暂时改为yes并重启服务或改用密钥登录。SFTP子系统请求被拒绝SFTP子系统路径配置错误或权限问题。检查服务器sshd_config中Subsystem sftp一行指向的sftp-server.exe路径是否存在默认在C:\Windows\System32\OpenSSH\下。6.2 性能与使用技巧传输速度慢SFTP传输会对文件进行加密解密会消耗一定CPU资源。如果速度不理想可以尝试在WinSCP站点设置的“高级” - “连接”中将“压缩”选项打开对于文本类文件可能有一定提升。更根本的是检查网络带宽和服务器磁盘性能。保持连接活跃长时间无操作可能导致连接断开。可以在WinSCP站点设置的“高级” - “SSH”中勾选“保持活动间隔”并设置一个值如60秒让客户端定期发送心跳包。使用队列传输当需要传输大量文件时不要一个个拖拽。可以选中多个文件后右键“上传”它们会被加入传输队列WinSCP会依次自动传输你可以中途暂停或跳过某个文件。配置文件备份你的WinSCP会话配置包括保存的密码和密钥默认存储在注册表中。可以通过“选项” - “首选项” - “存储”选择将配置存入INI文件方便备份和迁移到新电脑。6.3 关于权限的特别提醒这是Windows SFTP服务最易混淆的一点。通过SFTP登录后你看到的文件系统权限和通过Windows资源管理器看到的不是完全一样的。OpenSSH SFTP服务器会将Windows的ACL访问控制列表权限映射为类Unix的权限位如755644。这可能导致你通过SFTP创建的文件默认权限可能对其他用户包括系统服务不可读/写。如果你需要操作一些系统目录如C:\Program Files即使你是管理员也可能因权限映射问题而失败。解决方案对于需要高权限操作的场景有两个选择以管理员身份运行WinSCP右键点击WinSCP快捷方式选择“以管理员身份运行”。这样建立的SFTP会话会拥有更高权限。修改服务器端目录权限在服务器上对目标文件夹右键“属性” - “安全”添加相应用户并赋予完全控制权限。这是一种更持久的解决方法。搭建Windows SFTP服务器并用WinSCP连接一开始可能会觉得比直接开共享文件夹复杂但一旦配置完成其安全性、通用性和可靠性带来的便利是巨大的。它尤其适合需要跨网络、跨平台未来连接Linux服务器也一样用进行稳定文件交换的场景。我的个人体会是花半小时配置好这个环境以后几年都可能不再为传文件发愁这笔时间投资非常划算。最后一个小建议一定要尝试配置密钥登录并禁用密码这是从“能用”到“好用且安全”的关键一步。