记录一次从 Windows 本地向 Linux 服务器上传文件的完整过程,以及过程中遇到的典型坑(尤其是"用户名误判"问题),希望能帮到后来者。
一、问题背景
-
本地环境:Windows 10 / Windows 11
-
服务器环境:Linux(Ubuntu)
-
使用场景:
-
深度学习 / 模型训练
-
将本地数据集、配置文件上传到服务器
-
本地文件示例
C:\Users\user\Desktop\train_data.jsonl
C:\Users\user\Desktop\images\
服务器信息(示例,已脱敏)
服务器 IP:192.168.10.25
服务器目标目录(示例)
/data/project-a/model-train/
/data/project-a/datasets/images/
二、最容易踩坑的一步:确认服务器"真实用户名"
❗ 一个非常常见的误区
服务器目录名 ≠ 登录用户名
例如你可能看到服务器上有这样的路径:
/data/project-a
⚠️ 这只是目录名,并不代表你的登录用户名是 project-a。
✅ 正确做法:在服务器上查看真实用户名
在你已经成功登录服务器的终端中,执行:
whoami
示例输出:
user01
👉 说明你当前真正的登录用户是 user01。
辅助确认命令:
id
echo $HOME
三、使用 scp 上传单个文件(Windows → Linux)
1️⃣ scp 基本格式
scp 本地文件路径 用户名@服务器IP:服务器目录
2️⃣ 实际可用示例(已脱敏)
scp C:\Users\user\Desktop\train_data.jsonl user01@192.168.10.25:/data/project-a/model-train/
执行后输入服务器密码即可。
3️⃣ 在服务器上验证是否上传成功
ls -lh /data/project-a/model-train/train_data.jsonl
四、上传整个目录(如图片数据集)
✅ 推荐方式:递归上传整个目录
scp -r C:\Users\user\Desktop\images user01@192.168.10.25:/data/project-a/datasets/
上传完成后,服务器目录结构为:
/data/project-a/datasets/images/*.jpg
服务器端验证
ls /data/project-a/datasets/images | head
统计文件数量:
ls /data/project-a/datasets/images | wc -l
五、过程中遇到的典型坑与解决方案
❌ 坑 1:误把服务器目录名当作用户名
错误示例:
scp train_data.jsonl project-a@192.168.10.25:/data/project-a/
表现:
-
密码明明正确
-
但始终提示:
Permission denied, please try again.
✅ 根本原因 :
真实用户名是 user01,而不是 project-a。
✔ 正确做法:
whoami
❌ 坑 2:scp / sftp 看起来"像是被禁用了"
表象:
-
scp、sftp、ssh反复Permission denied -
调整各种参数仍无效
实际原因:
用户名错误导致所有认证失败,并非服务被禁用。
❌ 坑 3:Windows PowerShell 的路径与通配符问题
-
Windows 路径必须写完整:
C:\Users\user\Desktop\images -
PowerShell 不支持 Bash 风格:
*. {jpg,png}
❌ 坑 4:看到服务器路径就"想当然"
这是非常典型的误判:
/data/project-a
-
这是路径
-
不是账号
-
ssh / scp 只关心用户名
六、经验总结(强烈建议收藏)
-
第一步永远是:
whoami -
scp 使用的用户名必须与
whoami一致 -
服务器目录名 ≠ 登录用户
-
Windows 自带的
scp已完全够用 -
大多数
Permission denied本质都是 身份不匹配
七、结语
这次问题的根源并不复杂,但由于用户名理解错误,导致后续排错方向不断跑偏,浪费了大量时间。
希望这篇文章能帮助你在:
-
Windows → Linux 文件传输
-
深度学习服务器使用
-
ssh / scp 实战场景
中 少踩坑、快定位、一次成功。