菜鸟科技网

Windows命令行如何使用SFTP?

在Windows系统中使用命令行进行SFTP操作,可以通过内置的PowerShell或第三方工具如PuTTY实现,以下将详细介绍两种方法的操作步骤、常见命令及注意事项,帮助用户高效完成远程文件传输任务。

Windows命令行如何使用SFTP?-图1
(图片来源网络,侵删)

使用Windows PowerShell进行SFTP操作

Windows 10及以上版本默认支持OpenSSH客户端,可直接通过PowerShell执行SFTP命令,操作前需确保已安装OpenSSH工具(可通过“设置”-“应用”-“可选功能”-“添加功能”安装)。

连接SFTP服务器

sftp username@hostname
  • username:服务器用户名
  • hostname:服务器IP地址或域名 执行后会提示输入密码,也可通过-i参数指定私钥文件路径:
    sftp -i C:\path\to\private_key username@hostname

常用SFTP命令

连接成功后,进入SFTP交互模式,可执行以下命令:

命令 功能 示例
ls 列出当前目录文件 ls -l(显示详细信息)
cd 切换远程目录 cd /var/www
get 下载文件 get remote_file.txt C:\local\path
put 上传文件 put C:\local\file.txt /remote/path/
mkdir 创建远程目录 mkdir new_folder
rm 删除远程文件 rm old_file.txt
pwd 显示当前远程路径 pwd
quit 退出SFTP会话 quit

批量操作示例

下载整个远程目录:

get -r remote_dir/ C:\local\path

上传本地目录并保持结构:

Windows命令行如何使用SFTP?-图2
(图片来源网络,侵删)
put -r C:\local\dir/ /remote/path/

高级技巧

  • 免密登录:通过SSH密钥对实现,需将公钥上传至服务器~/.ssh/authorized_keys
  • 脚本化操作:在PowerShell脚本中调用SFTP命令,
    $sftpArgs = "-b $((Get-Content script.sftp) -join "`n") username@hostname"
    Start-Process sftp.exe -ArgumentList $sftpArgs -Wait

    其中script.sftp包含多行SFTP命令。

使用PuTTY实现SFTP操作

若系统未安装OpenSSH,可通过PuTTY的PSFTP工具实现SFTP操作。

下载与配置

  1. 下载PuTTY套件(包含PSFTP)并解压到系统路径。
  2. 生成密钥对(若使用密钥认证):
    puttygen -t rsa -b 2048 -C "your_email@example.com"

    保存私钥(.ppk文件)并上传公钥至服务器。

连接服务器

psftp username@hostname

使用密钥认证需指定私钥:

Windows命令行如何使用SFTP?-图3
(图片来源网络,侵删)
psftp -i private_key.ppk username@hostname

核心命令

命令 功能 示例
ls 列出文件 ls -a(显示隐藏文件)
cd 切换目录 cd /home/user
get 下载文件 get -r remote_dir
put 上传文件 put local_file.txt
mget 批量下载 mget *.txt
mput 批量上传 mput *.log

配置文件传输模式

PSFTP默认使用ASCII模式传输文本文件,需手动切换为二进制模式:

binary  # 后续传输均使用二进制模式
ascii   # 切换回文本模式

常见问题与解决方案

  1. 连接超时
    检查防火墙设置是否开放SFTP默认端口(22),或尝试指定端口:

    sftp -P 2222 username@hostname
  2. 权限错误
    确保本地用户对目标路径有读写权限,远程用户对服务器目录有操作权限,可通过chmod修改远程权限:

    chmod 755 /remote/directory

相关问答FAQs

Q1: 如何在SFTP会话中查看传输进度?
A1: PowerShell的SFTP命令本身不显示进度,但可通过第三方工具如lftpwinscp.com(命令行模式)实现进度显示,例如使用lftp:

lftp -u username,password -e "pget -n 10 remote_file; exit" sftp://hostname

其中-n参数指定并行任务数。

Q2: 如何通过SFTP自动同步本地与远程目录?
A2: 可编写脚本结合rsync(需安装)或使用SFTP的get/put命令配合循环逻辑,例如PowerShell脚本示例:

$remoteDir = "/remote/path"
$localDir = "C:\local\path"
$sftpSession = Start-Process sftp -ArgumentList "username@hostname" -PassThru -NoNewWindow
Get-ChildItem $localDir | ForEach-Object {
    $remoteFile = Join-Path $remoteDir $_.Name
    $command = "put `"$($_.FullName)`" `"$remoteFile`""
    $sftpSession.StandardInput.WriteLine($command)
}
$sftpSession.StandardInput.WriteLine("quit")
$sftpSession.WaitForExit()

需注意复杂场景建议使用专业工具如Unison或FreeFileSync。

分享:
扫描分享到社交APP
上一篇
下一篇