SFTP(SSH File Transfer Protocol,SSH 文件传输协议)是一种基于 SSH(Secure Shell)的安全文件传输协议,用于在客户端与服务器之间加密传输文件。它并非 FTP(File Transfer Protocol)的扩展,而是完全独立的协议,通过 SSH 的加密通道实现数据传输,比传统 FTP 更安全,是企业级文件传输的首选方案。
一、SFTP 的核心特点:为什么选择它?
-
安全性:
- 所有数据(包括用户名、密码、文件内容)均通过 SSH 加密传输,避免被窃听或篡改(传统 FTP 明文传输,易被攻击)。
- 依赖 SSH 的身份验证机制,支持密码登录、SSH 密钥对登录(更安全,无需明文密码)。
-
功能完备:不仅支持文件上传 / 下载,还能执行目录操作(创建、删除、切换)、权限修改、文件重命名等,功能类似本地文件管理。
-
兼容性:几乎所有 Linux/Unix 系统默认支持(通过
openssh-sftp-server组件),Windows 可通过 PuTTY、FileZilla 等工具连接,跨平台性强。 -
单一端口:仅需 SSH 的 22 端口即可工作,无需像 FTP 那样开放 21(控制)和随机数据端口,简化防火墙配置。
二、SFTP 的工作原理:基于 SSH 的加密传输
SFTP 依赖 SSH 协议建立安全连接,流程如下:
- 建立 SSH 连接:客户端向服务器的 22 端口发起 SSH 连接请求。
- 身份验证:服务器验证客户端身份(密码或 SSH 密钥)。
- 创建加密通道:验证通过后,双方建立加密的 SSH 会话通道。
- 文件传输:通过该加密通道执行 SFTP 命令(上传、下载、目录操作等),所有数据均经加密处理。
三、SFTP 的基本操作:命令行与工具
1. 命令行连接 SFTP 服务器
Linux/macOS 终端默认内置sftp命令,Windows 可通过 PowerShell 或 Git Bash 使用。
连接语法:
sftp [用户名@]服务器IP或域名 # 端口默认22,非默认端口需加 -P 端口号
示例:
sftp root@192.168.1.100 # 连接服务器192.168.1.100,用户root,默认端口22
sftp -P 2222 user@example.com # 连接端口2222的服务器
连接成功后,进入 SFTP 交互模式(提示符为sftp>),可执行 SFTP 命令。
2. 常用 SFTP 命令(交互模式)
SFTP 命令类似 Linux 文件操作,核心命令如下:
| 命令 | 功能说明 | 示例 |
| ls [目录] | 列出服务器指定目录的文件(默认当前目录) | ls /home # 列出服务器 /home 目录文件 |
| cd 目录 | 切换服务器上的工作目录 | cd /var/log # 切换到服务器 /var/log |
| pwd | 显示服务器当前工作目录 | pwd # 输出:/home/user |
| lcd 目录 | 切换本地客户端的工作目录 | lcd ~/downloads # 本地切换到下载目录 |
| get 服务器文件 [本地名] | 下载服务器文件到本地(可指定本地文件名) | get app.log # 下载 app.log 到本地当前目录;get app.log local.log # 重命名为 local.log |
| put 本地文件 [服务器名] | 上传本地文件到服务器(可指定服务器文件名) | put report.pdf # 上传 report.pdf 到服务器当前目录 |
| mkdir 目录 | 在服务器上创建目录 | mkdir backups # 服务器当前目录创建 backups |
| rm 文件 | 删除服务器上的文件 | rm old.log # 删除服务器的 old.log |
| rmdir 目录 | 删除服务器上的空目录 | rmdir temp # 删除空目录 temp |
| rename 旧名 新名 | 重命名服务器上的文件 / 目录 | rename file.txt new.txt |
| chmod 权限 文件 | 修改服务器文件的权限(如 644、755) | chmod 644 config.ini |
exit/quit | 退出 SFTP 连接 | exit |
3. 高级操作技巧
-
批量下载 / 上传:
- 下载目录(递归):
get -r 服务器目录(-r表示递归) - 上传目录(递归):
put -r 本地目录
- 下载目录(递归):
-
断点续传:支持断点续传(传输中断后,重新执行
get/put可从断点继续),需服务器支持(大部分 SFTP 服务器默认支持)。 -
SSH 密钥登录(免密码):
- 本地生成 SSH 密钥对(
ssh-keygen -t rsa,一路回车); - 将公钥(
~/.ssh/id_rsa.pub)上传到服务器的~/.ssh/authorized_keys; - 后续连接无需输入密码:
sftp user@server
- 本地生成 SSH 密钥对(
4. 图形化工具(适合新手)
对于不熟悉命令行的用户,可使用图形化 SFTP 工具,操作类似 FTP 客户端:
- FileZilla(跨平台):免费开源,支持 Windows/macOS/Linux,可视化界面,拖放即可传输文件。
- WinSCP(Windows):集成 SFTP 和 SCP 功能,支持文本编辑、同步目录等,适合 Windows 用户。
- Cyberduck(macOS):macOS 专用,界面简洁,支持多种云存储和 SFTP 协议。
四、SFTP 与 FTP、SCP 的区别
| 协议 | SFTP | FTP | SCP |
| 基础 | SSH | 独立协议 | SSH |
| 安全性 | 加密传输,安全性高 | 明文传输,安全性低 | 加密传输,安全性高 |
| 功能 | 支持文件管理、权限修改等 | 基本文件传输 | 仅支持文件 / 目录传输 |
| 端口 | 22 | 21 | 22 |
| 适用场景 | 企业级文件传输、敏感数据传输 | 非敏感数据的公开传输 | 脚本自动化传输(无交互) |
总结:SFTP 综合了安全性和功能性,是大多数场景的首选;SCP 适合纯脚本传输(命令更简洁);FTP 仅用于非敏感场景。
五、SFTP 服务器配置(以 Linux 为例)
Linux 系统默认通过openssh-server提供 SFTP 服务,无需额外安装,仅需简单配置即可限制用户权限(如仅允许访问指定目录)。
步骤:
-
确保安装
openssh-server:
# Ubuntu/Debian
sudo apt install openssh-server
# CentOS/RHEL
sudo yum install openssh-server
2.启动 SSH 服务并设置开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd
3.(可选)限制用户的 SFTP 目录(安全加固):编辑 SSH 配置文件/etc/ssh/sshd_config,添加如下配置(限制sftpuser用户仅能访问/home/sftpuser):
Match User sftpuser # 匹配用户sftpuser
ChrootDirectory /home/sftpuser # 限制根目录(必须为用户不可写的目录)
ForceCommand internal-sftp # 强制使用SFTP,禁止SSH登录
X11Forwarding no
AllowTcpForwarding no
-
保存后重启 SSH 服务:
sudo systemctl restart sshd
六、常见问题与解决
-
连接超时:
- 检查服务器 IP、端口是否正确(默认 22);
- 确认服务器防火墙允许 22 端口(
sudo ufw allow 22或firewall-cmd --add-port=22/tcp)。
-
权限不足:
- 上传文件时,确保服务器目标目录对当前用户有写入权限(
chmod 755 目录); - 若启用
ChrootDirectory,需确保根目录所有者为 root,权限为 755。
- 上传文件时,确保服务器目标目录对当前用户有写入权限(
-
密钥登录失败:
- 检查服务器
~/.ssh/authorized_keys权限是否为 600(chmod 600 authorized_keys); - 确保公钥内容正确复制,无多余空格或换行。
- 检查服务器
总结
SFTP 凭借加密传输、功能完备、易于配置等优势,成为企业级文件传输的标准方案。无论是命令行操作还是图形化工具,掌握 SFTP 能安全高效地在本地与服务器之间传输文件,是服务器管理、运维工作的必备技能。对于敏感数据传输(如日志、配置文件、业务数据),SFTP 是替代 FTP 的最佳选择。
1892

被折叠的 条评论
为什么被折叠?



