)
Linux命令-sftpSSH 文件传输协议客户端 简介 语法⚙️ 选项 交互命令远程操作命令本地操作命令文件传输命令控制命令 示例示例 1交互式基本操作示例 2非交互模式——在 Shell 中执行单条 SFTP 命令示例 3批量文件传输——使用批处理文件示例 4SSH 密钥认证与安全加密示例 5SFTP 运维实战——Web 站点部署示例 6SFTP 断点续传与传输限制⚠️ 注意 相关命令 总结快速参考sftp是基于 SSH 的安全文件传输客户端提供交互式命令行界面支持上传、下载、目录浏览、权限管理等完整文件操作。所有数据通过 SSH 加密通道传输是 FTP 的安全替代方案。sftp与 FTPS (FTP over SSL/TLS) 是不同的协议。sftp 运行在 SSH 子系统中默认端口 22只需 SSH 服务即可无需额外守护进程。 简介SFTPSSH File Transfer Protocol是 SSH 协议族的一部分由 IETF 在draft-ietf-secsh-filexfer系列草案中定义。与 SCP 不同SFTP 是一个有状态的交互式协议支持断点续传、目录列表、权限修改等高级操作功能远超 SCP。安装状态sftp随 OpenSSH 客户端一同安装几乎所有 Linux 发行版默认包含。# 检查 sftp 是否可用$whichsftp/usr/bin/sftp# 如不存在极少见安装方式# Debian/Ubuntu$sudoapt-getinstallopenssh-client# RHEL/CentOS/Fedora$sudoyuminstallopenssh-clients 语法sftp[选项][用户]主机[:路径]sftp[选项][用户]主机[:源文件][目标路径]sftp-b批处理文件[用户]主机第一种形式进入交互模式第二种形式用于单次文件下载类似 scp第三种形式用于非交互的批量操作。⚙️ 选项选项说明-P 端口指定 SSH 连接端口注意大写 P与 ssh 命令不同-i 私钥文件指定用于认证的 SSH 私钥-b 批处理文件从文件读取 SFTP 命令非交互式执行-o ssh_option传递额外 SSH 选项如-o StrictHostKeyCheckingno-C启用 SSH 压缩传输-c 加密算法指定加密算法如aes256-gcmopenssh.com-l 限制值限制传输带宽单位 KB/s-r递归复制整个目录交互模式下已废弃使用get -r-v详细输出模式便于调试连接问题-q静默模式不显示进度信息 交互命令进入 SFTP 后的交互命令体系是 SFTP 最强大的部分远程操作命令命令说明ls [目录]列出远程目录内容cd 目录切换远程工作目录pwd显示远程当前目录mkdir 目录创建远程目录rmdir 目录删除远程空目录rm 文件删除远程文件rename 旧名 新名重命名远程文件chmod 模式 文件修改远程文件权限chown 属主 文件修改远程文件所有者需权限chgrp 组 文件修改远程文件所属组df [-h]显示远程文件系统磁盘使用情况stat 文件显示远程文件详细信息类似于 ls -l 但更丰富ln [-s] 源 目标创建远程硬链接或符号链接symlink 源 目标创建远程符号链接本地操作命令命令说明lls [目录]列出本地目录内容lcd 目录切换本地工作目录lpwd显示本地当前目录lmkdir 目录创建本地目录!命令在本地 Shell 中执行命令例如!ls -la文件传输命令命令说明get [-r] 远程文件 [本地路径]下载远程文件-r递归下载目录put [-r] 本地文件 [远程路径]上传本地文件-r递归上传目录mget 通配符批量下载支持*?通配符mput 通配符批量上传reget 远程文件断点续传下载reput 本地文件断点续传上传progress切换传输进度显示控制命令命令说明bye/exit/quit退出 SFTP 会话help [命令]显示帮助信息version显示 SFTP 协议版本 示例示例 1交互式基本操作$sftpalice192.168.1.100 Connected to192.168.1.100. sftppwdRemote working directory: /home/alice sftplpwd Local working directory: /home/bob/projects sftpls-ladrwxr-xr-x6alice alice4096Jun1410:00.drwxr-xr-x4root root4096Jun1008:00..-rw-r--r--1alice alice220Jun1409:30 .bash_logout -rw-r--r--1alice alice3771Jun1409:30 .bashrc drwxr-xr-x2alice alice4096Jun1410:00 documents sftpcddocuments sftpput report.txt Uploading report.txt to /home/alice/documents/report.txt report.txt100%20482.0KB/s 00:00 sftpget logfile.txt Fetching /home/alice/documents/logfile.txt to logfile.txt logfile.txt100%40964.0KB/s 00:00 sftplls logfile.txt report.txt notes.md sftprmold_backup.tar.gz Removing /home/alice/documents/old_backup.tar.gz sftpbye# 预期输出# 成功连接 → 浏览目录 → 上传 report.txt → 下载 logfile.txt → 删除旧备份 → 退出示例 2非交互模式——在 Shell 中执行单条 SFTP 命令# 直接下载单个文件类似 scp 用法$sftpbobfileserver:/var/log/nginx/access.log ./my_access.log Fetching /var/log/nginx/access.log to ./my_access.log /var/log/nginx/access.log100% 125MB12.5MB/s 00:10# 上传文件$sftpbobfileserver:./deploy.tar.gz /tmp/ 注意此用法上传时第一个参数是本地文件第二个是远程目标# 使用 Here Document 执行多条命令$sftpdeploysftp.example.comEOF cd /var/www/html put index.html put style.css put app.js ls -la bye EOF# 预期输出# sftp cd /var/www/html# sftp put index.html进度条# sftp put style.css进度条# sftp put app.js进度条# sftp ls -la# drwxr-xr-x ... index.html# -rw-r--r-- ... style.css# -rw-r--r-- ... app.js# sftp bye示例 3批量文件传输——使用批处理文件# Step 1: 创建批处理命令文件$catbatch_download.sftpCMDS cd /backup/database lcd /local/restore get db_dump_20260614.sql.gz get innodb_backup.tar.gz cd /backup/logs lcd /local/restore/logs mget *.log rm *.log.old bye CMDS# Step 2: 执行批处理传输$sftp-bbatch_download.sftp admindbserver sftpcd/backup/database sftplcd /local/restore sftpget db_dump_20260614.sql.gz Fetching /backup/database/db_dump_20260614.sql.gz to /local/restore/db_dump_20260614.sql.gz sftpget innodb_backup.tar.gz Fetching /backup/database/innodb_backup.tar.gz to /local/restore/innodb_backup.tar.gz sftpcd/backup/logs sftplcd /local/restore/logs sftpmget *.log Fetching /backup/logs/error.log to /local/restore/logs/error.log Fetching /backup/logs/access.log to /local/restore/logs/access.log sftprm*.log.old Removing /backup/logs/error.log.old Removing /backup/logs/access.log.old# 批处理文件的通用格式# - 每行一条 SFTP 交互命令# - 支持所有 sftp 交互命令ls/cd/get/put/rm 等# - 最后以 bye/exit/quit 结束# 在 cron 定时任务中使用批处理$crontab-e# 每天凌晨 3 点自动下载数据库备份03* * *sftp-b/scripts/batch_download.sftp-oStrictHostKeyCheckingno admindbserver/var/log/sftp_cron.log21示例 4SSH 密钥认证与安全加密# Step 1: 生成专用 SFTP 密钥对$ ssh-keygen-ted25519-f~/.ssh/sftp_key-CsftpmyhostGenerating public/private ed25519 key pair. Your identification has been savedin/home/user/.ssh/sftp_key Your public key has been savedin/home/user/.ssh/sftp_key.pub# Step 2: 将公钥部署到远程服务器$ ssh-copy-id-i~/.ssh/sftp_key.pub usersftp-server# 或者手动部署无 ssh-copy-id 时$cat~/.ssh/sftp_key.pub|sshusersftp-servermkdir -p ~/.ssh cat ~/.ssh/authorized_keys# Step 3: 指定私钥连接$sftp-i~/.ssh/sftp_key usersftp-server Connected to sftp-server. sftpls无需输入密码直接进入交互模式# Step 4: SSH 配置文件简化$cat~/.ssh/configCONFIG Host sftp-prod HostName sftp.corp.example.com Port 2222 User deploy IdentityFile ~/.ssh/sftp_key StrictHostKeyChecking yes CONFIG# 现在可以用别名连接$sftpsftp-prod Connected to sftp.corp.example.com. sftp# 预期效果一键连接无需记忆 IP/端口/用户名/密钥路径示例 5SFTP 运维实战——Web 站点部署#!/bin/bash# Web 站点通过 SFTP 部署脚本SFTP_HOSTweb-prodREMOTE_ROOT/var/www/html/mysite# 本地构建目录BUILD_DIR./distecho 开始部署到$SFTP_HOST# 清理远程旧文件echo清理远程旧文件...sftp-b-$SFTP_HOSTSFTPEOF cd /var/www/html/mysite rm -rf css js images rm index.html SFTPEOF# 上传新构建文件echo上传构建产物...cd$BUILD_DIR# 递归上传目录sftp-b-$SFTP_HOSTSFTPEOF cd$REMOTE_ROOTput -r css put -r js put -r images put index.html put favicon.ico chmod 644 *.html *.ico chmod 755 css js images bye SFTPEOFecho 部署完成 # 验证部署sftp$SFTP_HOSTSFTPEOF cd /var/www/html/mysite ls -la df -h bye SFTPEOF# 预期输出# 开始部署到 web-prod # 清理远程旧文件...# 上传构建产物...# 部署完成 # sftp ls -la# drwxr-xr-x ... css# drwxr-xr-x ... js# drwxr-xr-x ... images# -rw-r--r-- ... index.html# sftp df -h# Size Used Avail (root) /dev/vda1 50.0G 12.5G 37.5G /示例 6SFTP 断点续传与传输限制# 断点续传下载reget resume getsftpuserhost sftpreget large_video.mp4 Resuming /remote/path/large_video.mp4 to large_video.mp4 large_video.mp450% 500MB10.2MB/s 00:25 ETA# 如果中途断开重新连接后sftpuserhost sftpreget large_video.mp4 Resuming large_video.mp4 at byte524288000large_video.mp4100% 1000MB10.0MB/s 01:38# 限制传输带宽-l 参数单位 KB/s$sftp-l1024userhost# 限制为 1MB/s1024 KB/ssftpget huge_database.dump huge_database.dump30% 300MB 1024KB/s 05:00 ETA# 带宽被限制在 1MB/s避免占满网络# 启用压缩传输-C 参数对文本文件效果明显$sftp-Cuserhost sftpput large_log.txt# 压缩传输可显著减少文本数据的传输量⚠️ 注意SFTP vs SCP 的选择建议虽然两者都基于 SSH但适用场景不同特性SFTPSCP协议类型有状态交互式无状态一次性传输断点续传✅ 支持reget❌ 不支持目录列表✅ls/dir❌ 不支持远程文件管理✅ 完整的rm/mkdir/chmod❌ 不支持传输速度略慢协议开销稍大略快开销小适用场景交互操作、批量管理简单一次性传输常见连接问题排查连接超时检查 SSH 端口是否正确-P而非-p防火墙是否放行权限拒绝确认密钥权限为 600chmod 600 ~/.ssh/id_*找不到 sftp 子系统检查远程/etc/ssh/sshd_config中Subsystem sftp是否配置 相关命令命令说明scp基于 SSH 的简单文件复制工具rsync高级文件同步工具支持增量传输和丰富选项sshSSH 客户端sftp 运行在其协议之上sshfs通过 SSH 挂载远程文件系统到本地lftp多协议文件传输客户端支持 sftp/ftp/http 等curl支持 SFTP 协议sftp://URL用于脚本集成 总结sftp是 Linux 系统管理员和开发者的日常必备工具它完美结合了 SSH 的安全性和 FTP 的交互便利性。核心优势安全性全数据通过 SSH 加密传输无明文风险免部署只需 SSH 服务即可无需额外安装 FTP 守护进程交互性支持完整的远程文件管理操作浏览、增删改、权限管理可脚本化批处理模式和 Here Document 支持自动化运维断点续传大文件传输中断后可恢复节省时间和带宽日常文件传输首选 SFTP仅在需要增量同步/镜像备份时使用rsync仅在极简一次性传输时使用scp。