Windows 本地文件上传到 Linux 服务器的完整实践(scp/ssh),以及常见踩坑总结

记录一次从 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 只关心用户名


六、经验总结(强烈建议收藏)

  1. 第一步永远是:

    复制代码
    whoami
  2. scp 使用的用户名必须与 whoami 一致

  3. 服务器目录名 ≠ 登录用户

  4. Windows 自带的 scp 已完全够用

  5. 大多数 Permission denied 本质都是 身份不匹配


七、结语

这次问题的根源并不复杂,但由于用户名理解错误,导致后续排错方向不断跑偏,浪费了大量时间。

希望这篇文章能帮助你在:

  • Windows → Linux 文件传输

  • 深度学习服务器使用

  • ssh / scp 实战场景

中 少踩坑、快定位、一次成功。

相关推荐
默|笙4 分钟前
【Linux网络】传输层协议TCP(3)滑动窗口、流量控制
linux·网络·tcp/ip
ManageEngineITSM1 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
CANI_PLUS1 小时前
电脑文件共享
运维·服务器
Linux界最忧郁之人2 小时前
华为云ECS&IMS&AS实战|弹性云服务器、私有镜像、弹性伸缩完整实验
linux·运维·服务器·centos·华为云·openstack
whyutianict_vv2 小时前
零基础转 AI 运维:投入清单、技术路线与核对表
linux·运维·人工智能·ai
无言听风雨丶2 小时前
systemd 与信号 / 僵尸进程:Linux 进程管理的底层逻辑与排错
linux·服务器·网络
DevOpenClub2 小时前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
小贾要学习3 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
g5zhu58963 小时前
没有公网ip的情况下,本地能ping服务器服务器不能ping本地,让服务器能访问本地某端口的简单方法
服务器·网络协议·tcp/ip
Blockbuater_drug3 小时前
OpenMM分子动力学模拟02 安装:Linux:conda 一条命令装通 GPU 加速的分子模拟环境
linux·conda·cuda·gpu驱动·pythonpath·openmm安装