sftp如何上传文件?
- 主机动态
- 2025-06-12
- 5
使用sftp命令登录服务器后,执行 put 本地文件路径 上传单个文件,或 mput 本地文件* 上传多个匹配文件。
SFTP上传文件的详细指南
SFTP(SSH文件传输协议)是一种基于SSH的安全文件传输协议,广泛用于服务器管理、数据备份等场景,相比传统的FTP,它通过加密通道传输数据,有效防止信息泄露,以下详细介绍命令行上传文件的操作方法,涵盖从基础连接到高级批量操作。
SFTP基础连接
在操作前,确保:
- 拥有远程服务器的IP地址、用户名和密码(或SSH密钥)。
- 本地已安装OpenSSH客户端(Linux/macOS默认安装;Windows需安装Git Bash或PuTTY)。
连接服务器命令:
sftp username@remote_server_ip
- 示例:sftp user@192.168.1.100
- 首次连接会提示确认主机密钥,输入yes后按回车。
- 输入密码完成登录(若用密钥,需提前配置)。
上传文件的命令详解
登录成功后,进入SFTP交互模式,常用命令:

| 命令 | 作用 |
|---|---|
| put [本地文件] | 上传单个文件 |
| mput [本地文件*] | 批量上传多个文件 |
| put -r [本地目录] | 递归上传整个目录 |
| lpwd | 查看本地当前路径 |
| cd [远程路径] | 切换远程目录 |
| lcd [本地路径] | 切换本地目录 |
上传单个文件
sftp> put local_file.txt /remote/path/
- 将本地local_file.txt上传到远程服务器的/remote/path/目录。
- 若省略远程路径,默认上传到远程当前目录。
批量上传多个文件
sftp> mput *.jpg
- 上传所有.jpg文件到远程当前目录。
- 使用mput *.log /var/log/指定远程路径。
上传整个目录(递归上传)
sftp> put -r local_folder /remote/path/
- -r参数表示递归操作,上传local_folder及其所有子内容。
高效操作技巧
-
指定本地/远程路径
上传前切换目录,避免输入长路径:
-
非交互式命令(单行操作)
无需登录SFTP交互模式:
echo "put local_file.txt /remote/" | sftp -b - user@192.168.1.100
- -b -表示从标准输入读取命令。
-
使用SSH密钥免密登录
生成密钥对后,上传公钥到服务器:
ssh-copy-id user@192.168.1.100
之后使用sftp命令无需输入密码。
-
权限拒绝错误
原因:远程目录无写入权限。
解决:
- 检查远程目录权限:ls -ld /remote/path
- 修改权限(需管理员权限):chmod 755 /remote/path
-
连接超时或拒绝
Connection timed out / Connection refused
原因:服务器SSH服务未运行、防火墙拦截或IP错误。
解决:
- 确认服务器IP和SSH端口(默认22)。
- 检查防火墙:sudo ufw allow 22(Ubuntu)。
-
文件覆盖提示
上传同名文件时,SFTP默认询问是否覆盖。
强制覆盖:put -f local_file.txt
禁用提示:sftp -o "StrictHostKeyChecking=no" user@ip(谨慎使用)。
- 启用密钥认证:比密码更安全,避免暴力免费。
- 限制用户目录:通过SSH配置ChrootDirectory锁定用户到特定目录。
- 日志监控:定期检查/var/log/auth.log(Linux)追踪SFTP登录记录。
- 使用SCP替代:单文件传输时,scp local.txt user@ip:/path/更高效。
- OpenSSH官方文档:https://www.openssh.com/manual.html
- Linux权限管理参考:《Linux命令行与Shell脚本大全》
- 安全实践建议:基于NIST SP 800-123指南
安全实践建议
引用说明:
版权声明:本文基于实践经验编写,转载请注明出处。

常见问题解决