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 看起来"像是被禁用了"

表象:

  • scpsftpssh 反复 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 实战场景

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

相关推荐
乌托邦的逃亡者2 小时前
CentOS/Openeuler主机中,为一个网卡设置多个IP地址
linux·运维·网络·tcp/ip·centos
桌面运维家3 小时前
服务器进程异常监控:快速定位与排障实战指南
运维·服务器
@CLoudbays_Martin113 小时前
UniApp是否能够接入SDK游戏盾呢?
服务器·网络·网络协议·tcp/ip·安全
念恒123063 小时前
进程控制---自定义Shell
linux·c语言
风曦Kisaki3 小时前
# Linux Shell 编程入门 Day02:条件测试、if 判断、循环与随机数
linux·运维·chrome
郝亚军4 小时前
ubuntu 22.04如何安装libmodbus
运维·服务器·ubuntu
李日灐4 小时前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
嵌入式×边缘AI:打怪升级日志4 小时前
嵌入式Linux开发:开源组件、第三方库与许可证详解
linux
计算机安禾4 小时前
【Linux从入门到精通】第34篇:搭建FTP与Samba——跨平台文件共享解决方案
linux·运维·服务器
乌恩大侠4 小时前
【AI-RAN】在空ubuntu服务器安装环境和生成TV,高达430G文件
服务器·人工智能·ubuntu·fpga开发·o-ru