首页/系统/Linux 运维命令速查/sftp 交互式文件传输
网络命令82 条

sftp 交互式文件传输

SSH 内建的交互式传输会话:put/get/ls/cd 像本地操作,-b 可批处理脚本化,替代 FTP 的安全选择。

Linux 运维命令速查系统更新于 2026-10-13

sftp 是什么

sftp 是 OpenSSH 套件自带的交互式文件传输客户端,全部流量都走 SSH 加密通道,所以不存在明文 FTP 那种口令与内容暴露问题。进入会话后 put、get、ls、cd、mkdir、rm 的用法贴近本地 shell,适合「先看看目录再决定传什么」的多次操作;配合 -b 指定命令文件又能变成完全非交互的批量传输,是脚本化场景里替代 FTP 的首选。它与 scp 的差别在于交互能力,与 rsync 的差别在于 rsync 只传差异。

基本信息

适用平台Linux、macOS、Windows 10 及以上(系统自带 OpenSSH 客户端)
语法sftp [user@]host 或 sftp -b 命令文件 host
常用选项-P 指定端口 -b 批处理文件 -r 递归 -i 指定私钥
会话内命令ls cd lcd put get mkdir rm bye
与 scp 对比scp 一次搬文件,sftp 适合浏览与多次操作
与 rsync 对比rsync 只传差异,sftp 每个文件都要一次往返

典型使用场景

  • 登录服务器浏览目录再挑选文件下载,比写一条完整 scp 路径更灵活。
  • 把一串 put/get 写进命令文件,做成可重复执行的传输脚本。
  • 在只开放 SSH 的环境里替代 FTP 上传发布产物。
  • 传输前先把远端旧文件改名备份,再上传新版本。
  • 用递归下载一次取回一个日志目录(文件数量不多时够用)。

常用写法

常用写法
sftp ops@10.0.0.5                       # 进入交互会话
# 会话内:ls | cd /data | put app.tar.gz | get app.log | mkdir logs | rm old.tgz | bye
sftp -P 2222 ops@10.0.0.5               # 指定非默认端口
sftp -i ~/.ssh/id_ed25519 ops@10.0.0.5  # 指定私钥免密登录
printf 'cd /data\nput backup.tar.gz\nbye\n' > cmd.txt
sftp -b cmd.txt ops@10.0.0.5            # 按命令文件批量执行
sftp -b cmd.txt -o BatchMode=yes ops@10.0.0.5   # 禁止交互提示,适合自动化
ls -l backup.tar.gz && sftp ops@10.0.0.5:/data/backup.tar.gz .  # 传完核对

选项与命令对照

选项或命令作用使用要点
-P 端口指定 SSH 端口sftp 用大写 P,别和 ssh 的小写 p 混用
-b 文件非交互批处理命令文件里不能有交互动作,遇错默认继续
-r递归传输目录级操作,文件多时不如打包或 rsync
-i指定私钥自动化免密登录必备
-o BatchMode=yes禁用交互提示避免脚本卡在口令或确认提示上
bye / exit退出会话批处理文件末尾要写上
批处理模式下某条命令失败默认继续执行后续命令,不会整体中断。需要在失败时停止可以用命令前的短横线前缀做细粒度控制,具体语义以本机 man 1 sftp 为准。
sftp 每个文件都要一次协议往返:传输成千上万个小文件时速度远不如 rsync,工程上通常先 tar 打包成一个文件再传,落地后解包。
批处理文件里的远端路径含空格需要用引号包起来,否则会被拆成多个参数并报文件不存在;含通配符的路径也要注意 sftp 的通配规则与本地 shell 不同。

易错点

  • 把端口参数写成小写 p(ssh 的写法),sftp 会报未知选项而无法连接;sftp 与 scp 一律用大写 -P。
  • 批处理文件里包含需要交互确认的动作,任务会卡住直到超时;自动化场景配合禁用交互提示,并确保目标路径不会触发覆盖确认。
  • 用 sftp 传大量小文件,耗时远超预期且中断后无法续传;这类场景先打包成一个文件再传,或改用 rsync。
  • 只看命令退出码不看远端结果,半截文件被当成传输成功;传完用 ls -l 核对大小,重要文件比对摘要。

数据来源与参考

  • man 1 sftp(OpenSSH 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌