什么是 SFTP 协议
SFTP(SSH File Transfer Protocol)是一种基于 SSH(Secure Shell)的文件传输协议,用于在安全加密的通道中传输文件。与传统的 FTP 不同,SFTP 具有更高的安全性,因为它在传输过程中加密数据和身份验证信息,防止数据被窃听或篡改。
核心概念
SFTP 协议本质上是 SSH 协议的一个子系统,它利用 SSH 的加密机制,提供文件传输、目录操作、权限设置等功能。SFTP 与 FTP 不同,它不使用单独的控制和数据连接,而是通过一个安全的 SSH 通道完成所有操作,简化了配置并增强了安全性。
常用命令
下表列出了在使用 SFTP 协议时最常用的命令及其功能说明:
| 命令 | 功能说明 | 使用频率 |
|---|---|---|
sftp user@host |
连接到远程服务器 | ★★★★★ |
put file |
上传本地文件到远程服务器 | ★★★★☆ |
get file |
从远程服务器下载文件 | ★★★★☆ |
ls |
列出远程服务器目录内容 | ★★★★☆ |
cd directory |
进入远程服务器的指定目录 | ★★★★☆ |
mkdir dir |
在远程服务器创建新目录 | ★★★☆☆ |
rm file |
删除远程服务器上的文件 | ★★★☆☆ |
rmdir dir |
删除远程服务器上的空目录 | ★★☆☆☆ |
基础命令示例
连接服务器
sftp user@192.168.1.100
这行命令通过 SFTP 协议连接到 IP 地址为
192.168.1.100的服务器,使用用户名user。连接成功后,会提示输入密码或使用密钥认证。
上传文件
put localfile.txt /remote/directory/
将本地文件
localfile.txt上传到远程服务器的/remote/directory/路径下。
下载文件
get remotefile.txt ./local/
从远程服务器下载文件
remotefile.txt到本地当前目录下的./local/文件夹中。
列出远程目录内容
ls /remote/directory/
显示远程服务器
/remote/directory/目录下的文件和子目录列表。
高级使用场景
递归上传目录
put -r myproject /remote/directory/
-r参数表示递归上传,将本地的myproject目录及其所有子文件和子目录上传至远程路径/remote/directory/。
自动化脚本连接
sftp -oPort=2222 -oIdentityFile=~/.ssh/id_rsa user@192.168.1.100 << EOF
put localfile.txt /remote/
get remotefile.txt ./local/
EOF
使用
-o参数指定端口和密钥文件,通过EOF(Here Document)方式实现自动化脚本连接,上传和下载文件无需手动输入命令。
查看远程文件的权限
lls -l
lls用于列出本地文件,-l参数展示详细信息,包括权限、大小和修改时间。
常见问题
1. SFTP 登录时提示 "Connection refused" 是怎么回事?
原因:通常是 SSH 服务未运行或端口不通。
解决:检查远程服务器的 SSH 服务状态,确认端口(默认 22)是否开放,防火墙是否拦截连接。
2. 如何避免每次输入密码?
解决:使用 SSH 密钥认证。将本地生成的公钥添加到远程服务器的 ~/.ssh/authorized_keys 文件中,即可实现免密码登录。
3. 上传大文件时很慢,怎么办?
解决:检查网络带宽,确认 SFTP 服务器未限制传输速度。此外,可以使用压缩工具(如 tar.gz)打包后再上传,减少传输时间。
4. SFTP 与 FTPS 有什么区别?
回答:SFTP 是基于 SSH 的安全协议,FTPS 是基于 TLS/SSL 的 FTP 安全扩展。SFTP 的加密机制更统一,命令在单个通道中执行;FTPS 则是 FTP 协议的增强版,需要在多个连接中处理加密和数据传输。
总结
SFTP 协议是基于 SSH 的安全文件传输方案,适合需要在不安全网络中安全传输文件的场景。掌握其基础命令和常见用法,能快速实现远程服务器的文件管理与同步。