[SSH] sftp 基于SSH的交互式文件传输工具

参考:

01 背景

1.1 简介

sftp 是一个通过 SSH (Secure Shell) 协议安全传输和管理文件的交互式工具。 可以把它理解为加密版的 FTP,或一个专门用于文件操作的 SSH 扩展。它建立在 SSH 的安全通道之上,保证了数据传输的机密性和完整性。

1.2 sftp 与 ftp 的对比

特性 sftp (SSH File Transfer Protocol) FTP (File Transfer Protocol)
协议基础 基于 SSH 协议 独立的 FTP 协议
安全性 加密传输 所有数据通过SSH加密 密码和文件内容均受保护 明文传输 密码、命令、文件内容均未加密 易被窃听
端口使用 使用 SSH 端口 默认 22 端口 使用专用端口 控制端口默认 21 数据端口动态分配
身份验证 使用 SSH 认证机制 密码认证 SSH密钥认证 独立的用户名/密码认证 明文发送凭证
防火墙友好度 友好 只需要开放一个端口(22) 不友好 需要开放多个端口 主动/被动模式复杂
隶属关系 是 OpenSSH 套件的一部分 不属于 OpenSSH 套件 独立的服务
现代应用 推荐使用 安全文件传输的标准 不推荐 仅用于遗留系统 特殊内部环境

1.3 sftp 与 scp 适用场景对比

特性 sftp 适用场景 scp 适用场景
文件系统操作 需要浏览文件系统时 已知确切文件路径
传输频率 多次文件传输操作 简单的单次文件复制
功能需求 需要文件管理(删除、重命名、权限修改) 只需要基本的文件传输功能
路径明确度 不确定文件路径,需要探索目录结构 已知确切文件路径的快速传输
自动化程度 交互式操作 脚本自动化操作
使用模式 交互式会话 单命令执行

02 登录

2.1 基础登录

# 直接登录 user@host
sftp user@host

连接成功后,你会看到 sftp> 提示符,进入交互模式。

2.2 指定端口

# -P: 指定登录端口
sftp -P 2222 user@host

2.3 指定登录密钥

# -i: 使用特定的 SSH 密钥文件进行认证
sftp -i ~/.ssh/key user@host

03 基础操作

3.1 本地操作

以下命令在本地计算机执行:

sftp> lls                 # 列出本地文件
sftp> lcd /path/local     # 切换本地目录
sftp> lpwd                # 显示本地当前目录

3.2 远程文件操作

以下命令在远程服务器上执行:

sftp> ls                        # 列出远程文件
sftp> cd /path/remote           # 切换远程目录
sftp> pwd                       # 显示远程当前目录
sftp> mkdir new_folder          # 在远程创建目录
sftp> rm file.txt               # 删除远程文件
sftp> rename old.txt new.txt    # 重命名远程文件
sftp> chmod 755 script.sh       # 修改远程文件权限
sftp> !                         # 执行本地shell命令
sftp> exit                      # 退出sftp

04 文件传输

4.1 单文件

sftp> put localfile.txt         # 上传单个本地文件到远程
sftp> get remotefile.txt        # 下载单个远程文件到本地

4.2 多文件

sftp> mput *.txt                # 批量上传多个文件(支持通配符)
sftp> mget *.log                # 批量下载多个文件(支持通配符)

4.3 递归传输文件夹

sftp> put -r local_dir          # 递归上传整个目录及其内容
sftp> get -r remote_dir         # 递归下载整个目录及其内容

4.4 保留文件属性

sftp> put -P bigfile.zip        # 上传文件并保留文件的修改时间等属性
sftp> get -P bigfile.zip        # 下载文件并保留文件的修改时间等属性

4.5 断点续传

sftp> reput large_file.dat      # 尝试对未完成的文件进行断点续传(上传)
sftp> reget large_file.dat      # 尝试对未完成的文件进行断点续传(下载)

05 高级技巧

5.1 非交互模式单步执行

# 示例:直接下载一个文件后退出
sftp user@host:/path/to/remote/file /path/to/local/target

5.2 批处理脚本

将所有 sftp 命令写入一个批处理文件,然后使用 -b 选项执行:

transfer.batch 文件内容:

# 切换到本地目录
lcd /tmp/backup
# 切换到远程目录
cd /var/log/
# 下载所有 log 文件
mget *.log
# 退出
bye

执行命令:

sftp -b transfer.batch user@server_address
posted on 2025-10-20 00:26  风惊庭前叶  阅读(0)  评论(0)    收藏  举报