sftp(Secure File Transfer Protocol)是一种基于SSH协议的安全文件传输工具,相较于传统的FTP,sftp通过加密传输数据(使用SSH的加密机制),有效避免了信息泄露和篡改风险,广泛应用于服务器文件管理、数据备份等场景,本文将详细介绍sftp命令的使用方法,包括连接服务器、文件传输、目录管理及权限控制等核心操作,帮助用户快速上手。
连接远程服务器
使用sftp连接远程服务器前,需确保目标服务器已启用SSH服务(默认监听22端口,可通过-P参数自定义端口),基本连接格式为:sftp [用户名]@[主机名]
,以用户名user
连接IP为168.1.100
的服务器,命令为:
sftp user@192.168.1.100
执行后会提示输入该用户的SSH密码(若使用密钥认证,需提前配置免密登录,可通过ssh-keygen
生成密钥,并将公钥添加到服务器的~/.ssh/authorized_keys
文件中),连接成功后,会显示sftp提示符(通常为sftp>
),此时可输入相关命令进行操作。
基本文件操作
连接后,首先需要确认当前目录和文件结构。ls
命令用于列出远程目录下的文件及子目录,支持-l
参数显示详细信息(如权限、大小、修改时间等),
ls -l /home/user/ # 查看远程用户目录下的详细文件列表
cd
命令用于切换远程目录,用法与Linux终端一致,如:
cd documents # 进入远程服务器的documents子目录
pwd
命令则显示当前所在的远程目录完整路径,方便定位文件位置,需要注意的是,sftp默认进入用户的家目录(如/home/user/
),可通过cd /
切换到根目录。
文件传输
文件传输是sftp的核心功能,上传和下载分别通过put
和get
命令实现,上传本地文件到远程服务器时,put
命令的基本格式为:put [本地文件路径] [远程文件路径]
,将当前本地目录下的test.txt
上传到远程服务器的/home/user/docs/
目录,并重命名为remote.txt
,命令为:
put test.txt /home/user/docs/remote.txt
若需上传整个目录,需添加-r
参数(递归上传),如:
put -r local_dir/ /home/user/remote_dir/ # 上传本地local_dir目录到远程remote_dir
下载远程文件到本地则使用get
命令,格式为:get [远程文件路径] [本地文件路径]
,下载远程服务器上的data.zip
到当前本地目录,命令为:
get data.zip ./
若需下载到指定目录,可完整指定路径,如:
get /home/user/docs/report.pdf /path/to/local/report.pdf
同样,-r
参数可用于递归下载目录,如:
get -r remote_dir/ ./local_dir/ # 下载远程remote_dir目录到本地local_dir
目录与文件管理
除了文件传输,sftp还支持基本的目录和文件管理操作。mkdir
命令用于创建远程目录,如:
mkdir new_folder # 在当前远程目录下创建new_folder子目录
rmdir
命令用于删除空目录,如:
rmdir empty_folder # 删除远程empty_folder目录(需为空目录)
删除远程文件使用rm
命令,如:
rm old_file.log # 删除远程old_file.log文件
若需删除非空目录,需添加-r
参数(rm -r non_empty_dir/
),可通过rename
命令重命名文件或目录,格式为:rename [旧名称] [新名称]
,如:
rename old_name.txt new_name.txt # 将远程文件old_name.txt重命名为new_name.txt
权限与高级参数
远程文件的权限可通过chmod
命令修改,格式与Linux系统一致,如:
chmod 755 script.sh # 将远程script.sh的权限设置为所有者可读、写、执行,组和其他用户可读、执行
sftp还支持一些高级参数,
-C
:启用压缩传输(减少网络带宽占用,适合大文件传输),如sftp -C user@host
;-P
:指定非默认SSH端口,如sftp -P 2222 user@host
(服务器SSH端口为2222时);-v
:启用详细模式(显示传输过程中的详细信息,便于调试),如sftp -v user@host
。
若需查看本地目录或文件,可使用lcd
(切换本地目录)和lls
(列出本地文件),如:
lcd /path/to/local # 切换本地工作目录 lls # 列出当前本地目录下的文件列表
注意事项
- 安全性:始终优先使用sftp而非ftp,确保数据传输加密;若服务器允许,建议配置SSH密钥认证替代密码登录,提升安全性。
- 端口与权限:确保防火墙开放SSH端口(默认22),且用户对目标目录有足够的读写权限。
- 文件名处理:若文件名包含空格或特殊字符(如空格、、等),需用双引号括起来,如:
put "my file.txt" "remote file.txt"
- 传输中断:sftp本身不支持断点续传,若传输中断需重新传输;对于大文件,可考虑使用
rsync
(支持断点续传)替代。
相关问答FAQs
问题1:sftp和ftp有什么区别?
解答:sftp基于SSH协议,数据传输全程加密(使用AES等加密算法),安全性高;而ftp是明文传输,用户名、密码及文件内容均可能被窃取,sftp使用单一端口(SSH端口),而ftp默认使用20(数据传输)和21(控制)两个端口,配置更复杂;sftp的命令与Linux终端类似(如ls
、cd
),ftp则使用独立命令集(如dir
、cd
)。
问题2:sftp传输文件时提示权限不足怎么办?
解答:权限不足通常是由于当前用户对目标目录或文件没有读写权限,可尝试以下方法:
- 检查目标目录权限:使用
ls -l
查看目录权限,确保用户有执行权限(进入目录需x
权限)和写权限(创建/修改文件需w
权限); - 联系服务器管理员调整权限;
- 若上传文件,确保目标目录存在且有写权限,如
mkdir -p /home/user/upload
(创建不存在的目录并赋予递归权限),再执行put
命令。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15842.html