目录
- 01 背景
- 1.1 简介
- 1.2 sftp 与 ftp 的对比
- 1.3 sftp 与 scp 适用场景对比
- 02 登录
- 2.1 基础登录
- 2.2 指定端口
- 2.3 指定登录密钥
- 03 基础操作
- 3.1 本地操作
- 3.2 远程文件操作
- 04 文件传输
- 4.1 单文件
- 4.2 多文件
- 4.3 递归传输文件夹
- 4.4 保留文件属性
- 4.5 断点续传
- 05 高级技巧
- 5.1 非交互模式单步执行
- 5.2 批处理脚本
参考:
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