在Windows系统中,通过命令行使用SFTP(SSH File Transfer Protocol)进行文件传输是许多开发者和系统管理员的常见需求,相较于图形化工具,命令行操作更高效、自动化程度更高,尤其适合批量处理或脚本化场景,本文将详细介绍Windows环境下如何通过命令行使用SFTP,包括准备工作、基本操作、进阶技巧及常见问题解决方法。

准备工作
在开始使用SFTP命令行之前,需确保以下环境已配置完成:
- 启用SSH服务:目标服务器需已开启SSH服务(通常使用OpenSSH),并确保SFTP功能可用,可通过服务器的
sshd_config配置文件确认Subsystem sftp是否已启用。 - 安装OpenSSH客户端:Windows 10及以上版本已内置OpenSSH客户端,可通过命令提示符或PowerShell直接使用
sftp命令,若早期版本(如Windows 7),需手动安装OpenSSH客户端,例如通过Git for Windows或PuTTY的配套工具。 - 网络连通性:确保本地计算机与目标服务器之间的网络畅通,可通过
ping或telnet测试服务器的SSH端口(默认为22)。
SFTP基本操作
连接服务器
使用以下命令格式连接SFTP服务器:
sftp [用户名]@[服务器IP或域名] -p [端口号]
sftp root@192.168.1.100 -p 22
首次连接时,系统会提示服务器的主机密钥指纹,输入yes确认后,输入用户密码即可登录,若需避免重复输入密码,可配置SSH密钥认证(见后文“进阶技巧”)。
常用命令
登录后,可通过以下命令进行文件操作:

| 命令 | 功能描述 | 示例 |
|---|---|---|
ls [路径] |
列出指定目录文件 | ls /home/user |
cd [路径] |
切换远程服务器目录 | cd /var/log |
get [远程文件] |
下载远程文件到本地 | get backup.zip |
put [本地文件] |
上传本地文件到远程服务器 | put C:\local\file.txt |
mkdir [目录名] |
在远程服务器创建目录 | mkdir new_folder |
rm [文件] |
删除远程服务器文件 | rm old_file.txt |
rmdir [目录] |
删除远程服务器空目录 | rm empty_dir |
pwd |
显示当前远程服务器目录 | pwd |
! [本地命令] |
执行本地系统命令 | ! dir C:\ |
exit或bye |
退出SFTP会话 | exit |
文件传输选项
- 指定本地/远程路径:
get和put命令支持直接指定路径,get /remote/path/file.txt C:\local\path\ put C:\local\file.txt /remote/path/
- 批量传输:可通过通配符传输多个文件,
get *.txt # 下载所有.txt文件 put C:\local\*.log # 上传所有.log文件
- 显示传输进度:使用
-b批处理文件或--progress参数(部分OpenSSH版本支持)。
进阶技巧
使用SSH密钥认证避免密码输入
为提高安全性和便利性,可配置基于密钥的认证:
- 生成密钥对(本地执行):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
- 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub [用户名]@[服务器IP]
或手动将公钥内容追加到服务器
~/.ssh/authorized_keys文件中。
批处理模式自动化传输
通过编写脚本实现自动化操作,例如创建sftp_script.txt:
open [用户名]@[服务器IP]
get /remote/file.txt C:\local\
put C:\local\upload.zip /remote/
bye
执行命令:

sftp -b sftp_script.txt
防火墙与代理配置
若本地或服务器存在防火墙限制,需确保SSH端口(默认22)开放,若需通过代理连接,可在~/.ssh/config中配置:
Host proxy
HostName [代理服务器IP]
User [代理用户名]
Port [代理端口]
Host target
HostName [目标服务器IP]
User [目标用户名]
ProxyCommand ssh proxy -W %h:%p
常见问题与解决
连接超时或被拒绝
- 原因:服务器SSH服务未启动、防火墙拦截或用户名/密码错误。
- 解决:检查服务器SSH状态(
systemctl status sshd),确认防火墙规则,或使用ssh -v [用户名]@[服务器IP]调试连接过程。
文件传输中断
- 原因:网络不稳定或磁盘空间不足。
- 解决:尝试分块传输大文件,或使用
sftp -b脚本结合rsync实现断点续传。
相关问答FAQs
Q1: 如何在Windows命令行中查看SFTP传输的实时进度?
A: 部分OpenSSH版本支持--progress参数(如sftp --progress get large_file.zip),若不支持,可在传输前使用ls -l查看文件大小,或通过第三方工具如psftp(PuTTY套件)获取进度提示。
Q2: SFTP连接时提示“Permission denied (publickey,password)”如何解决?
A: 此错误通常与认证方式相关,首先确认服务器是否允许密码登录(检查sshd_config中的PasswordAuthentication yes);若使用密钥认证,需确保公钥正确上传至服务器,且私钥权限设置正确(chmod 600 ~/.ssh/id_rsa),检查服务器/var/log/auth.log或Windows事件查看器中的详细错误日志可进一步定位问题。
