Skip to content

上传和下载文件(Windows)

AICoder 是智算云平台上的一个云端辅助开发环境,提供免费的 CPU 实例,专为管理和辅助 AI 工作负载而设计。

AICoder 支持通过跳板机使用 scpsftp,或通过 WSL 使用 rsync,在本地与云端实例间传输文件。本文介绍如何选择并使用这些工具上传和下载文件或文件夹。

准备工作

  • 您已成功创建并启动 AICoder 实例。
  • 您已在平台登记 SSH 公钥,并通过 AICoder Shell 窗口中的一键重启界面操作重启目标 AICoder,使新公钥生效。详见 SSH 远程连接
  • 如果目标是共享高性能存储,您已在启动 AICoder 时选择与存储卷相同的可用区,并通过界面挂载目标存储卷。

重要

一键重启是 AICoder Shell 窗口中的界面操作,不是在 PowerShell、命令提示符或 AICoder 终端中执行的命令。登记 SSH 公钥后必须重启目标 AICoder;新公钥只有在重启完成并由平台注入后才会生效。

本地如何访问 AICoder 实例

注意

安全起见,AICoder 不会直接向公网暴露访问地址。我们设计了一种 SSH 跳转的解决方案,帮助您顺利连接到我们平台上的 AICoder 实例。

登录智算云平台,获取 AICoder 实例的 SSH 地址。打开 AICoder Shell 后,在窗口右上角点击密钥按钮,点击后出现如下弹窗:

AICoder 实例的 SSH 连接命令格式如下:

language-shell
ssh -J ssh-jumper.neogpu.com username@aicoder_id

例如,用户 Jane Doe 的 SSH 连接命令为:

language-shell
ssh -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b

root 为默认 SSH 登录用户名(部分旧版实例展示为非 root 普通用户名,请按照 SSH 远程连接中的界面步骤重启实例),aic-c8lkg5b88mieqw6b 是 AICoder 实例的 ID。请记录用户名与实例 ID(username@aicoder_id),在后续的文件传输过程中,我们会使用该字符串代表需要连接的 AICoder 实例。

提示

  • 即使您重置、重启 AICoder 实例,实例 ID 仍保持不变,因此您无需担心连接地址变更。
  • 但是,如果您在不同可用区打开 AICoder,您会注意到 AICoder 实例的 ID 并不相同。一般情况下,租户的资源池均在同一个可用区。

确认共享存储目标路径

/mnt/public 只是共享存储挂载路径示例。开始传输前,在本地 PowerShell 或命令提示符中运行以下命令:

language-powershell
ssh -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b "findmnt -T /mnt/public && df -h /mnt/public && test -w /mnt/public && echo shared-storage-ready"

只有显示 shared-storage-ready,并且 findmnt 显示 /mnt/public 位于共享存储文件系统而不是 / 或 OverlayFS 时,才能继续上传。df 在部分可用区不能反映存储卷配额,因此还需在控制台确认剩余配额。不要通过 mkdir /mnt/public 创建挂载点;请返回 AICoder 启动界面配置存储卷。

确认挂载后,可以创建示例子目录:

language-powershell
ssh -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b "mkdir -p /mnt/public/janedoe"

使用 scp 和 sftp

通过跳板机使用 scpsftp 上传和下载文件的命令格式如下:

新手提示

上传、下载操作均需要在本地计算机运行命令(scp/sftp),不需要在目标 AICoder 或开发机上运行命令。

安装 OpenSSH

  1. 打开 "设置" 应用,进入 "应用" -> "可选功能"。
  2. 点击 "添加功能" 并选择 "OpenSSH Client" 进行安装。

使用 scp 上传文件

language-shell
scp -J ssh-jumper.neogpu.com localfile username@aicoder_id:/remotefile

例如,用户 Jane Doe 将本地文件直接上传到 AICoder 挂载的共享存储目录 /mnt/public/janedoe

language-shell
scp -J ssh-jumper.neogpu.com C:\Users\janedoe\Desktop\v2.jpg root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/

使用 scp 下载文件

language-shell
scp -J ssh-jumper.neogpu.com username@aicoder_id:/remotefile localfile

例如,用户 Jane Doe 将 AICoder 上的文件下载到本地目录 C:\Users\janedoe\Desktop

language-shell
scp -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/v2.jpg C:\Users\janedoe\Desktop\

使用 scp 上传文件夹

language-shell
scp -r -J ssh-jumper.neogpu.com localfolder username@aicoder_id:/remotefolder

例如,用户 Jane Doe 将本地文件夹 myfolder 上传到共享存储目录 /mnt/public/janedoe

language-shell
scp -r -J ssh-jumper.neogpu.com C:\Users\janedoe\Desktop\myfolder root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/

使用 scp 下载文件夹

language-shell
scp -r -J ssh-jumper.neogpu.com username@aicoder_id:/remotefolder localfolder

例如,用户 Jane Doe 将 AICoder 上的文件夹 myfolder 下载到本地目录 C:\Users\janedoe\Desktop

language-shell
scp -r -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/myfolder C:\Users\janedoe\Desktop\

使用 sftp 上传和下载文件

通过跳板机建立 sftp 连接的命令格式如下:

language-shell
sftp -J ssh-jumper.neogpu.com username@aicoder_id

例如,用户 Jane Doe 与 AICoder 平台建立 SFTP 连接:

language-shell
sftp -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b

进入 SFTP 界面后,使用 put 上传文件:

language-shell
sftp> put localfile remotefile

例如,从本地上传文件到 AICoder:

language-shell
sftp> put C:\Users\janedoe\Desktop\v2.png /mnt/public/janedoe/

使用 get 下载文件:

language-shell
sftp> get remotefile localfile

例如,从 AICoder 下载文件到本地:

language-shell
sftp> get /mnt/public/janedoe/v2.png C:\Users\janedoe\Desktop

使用 sftp 上传和下载文件夹

SFTP 可通过 -r 选项递归传输整个文件夹。

使用 -r 选项

这是最直接的方法,可以递归地上传或下载文件夹及其内容。

上传文件夹(格式):

language-shell
sftp> put -r localdir /remote/path

效果:

text
/remote/path/
├── file1.txt
└── file2.txt

简而言之,这个命令会将本地机器上 localdir 目录内的内容,包括所有子目录和文件,复制到远程服务器的 /remote/path 目录下。

例如,用户 Jane Doe 需要将本地目录 C:\Users\janedoe\desktop\fromwin 上传到共享存储的 /mnt/public/janedoe/fromwin 路径。在 Windows 上,需要在远程路径中明确指定 fromwin

language-shell
sftp> lpwd
Local working directory: c:\users\janedoe\desktop

sftp> put -r c:\users\janedoe\desktop\fromwin /mnt/public/janedoe/fromwin
Uploading c:/users/janedoe/desktop/fromwin/ to /mnt/public/janedoe/fromwin/
Entering c:/users/janedoe/desktop/fromwin/
c:/users/janedoe/desktop/fromwin/file1.txt                       100%    0     0.0KB/s   00:00
c:/users/janedoe/desktop/fromwin/file2.txt                       100%    0     0.0KB/s   00:00
c:/users/janedoe/desktop/fromwin/file3.txt                       100%    0     0.0KB/s   00:00
sftp> ls /mnt/public/janedoe
/mnt/public/janedoe/fromwin

sftp>

下载文件夹:

language-shell
sftp> get -r remotefolder localfolder

例如,用户 Jane Doe 需要将共享存储中的 /mnt/public/janedoe/myfolder 下载到本地目录 C:\Users\janedoe\Desktop\ 下。

language-shell
sftp> get -r /mnt/public/janedoe/myfolder C:\Users\janedoe\Desktop\myfolder

注意

使用 -r 选项时要小心,它会覆盖目标位置的现有文件。

mput *mget * 只适合匹配当前目录中的多个文件,不能替代递归目录传输。包含子目录时请使用上面的 put -rget -r;大型目录建议改用 rsync

使用 WSL 和 rsync 传输大量数据

Windows 原生 OpenSSH 不包含 rsync。如需传输大文件、大量文件或实现断点续传,建议安装 WSL,并在 WSL 终端中运行 rsync

重要

不要跳过 SSH 密钥检查:Windows 和 WSL 使用不同的 SSH 密钥目录。

PowerShell 或命令提示符使用的密钥通常位于 C:\Users\<username>\.ssh\,WSL 使用的密钥位于该 WSL 发行版的 ~/.ssh/。即使 Windows 端已经可以登录 AICoder,WSL 也不会自动获得对应的私钥。以下密钥检查、连接测试和 rsync 命令必须在同一个 WSL 发行版中运行;不要在 PowerShell、命令提示符、Git Bash 和多个 WSL 发行版之间交替执行。

在 WSL 中准备 rsync 和 SSH 公钥

  1. 打开后续实际用于传输的 WSL 发行版,确认发行版名称、Linux 主目录、命令路径和已有公钥:

    language-shell
    # 在 WSL 终端中运行
    printf 'WSL_DISTRO_NAME=%s\nHOME=%s\n' "$WSL_DISTRO_NAME" "$HOME"
    command -v ssh
    command -v ssh-keygen
    command -v rsync
    ls -l ~/.ssh/*.pub 2>/dev/null
  2. 如果 sshssh-keygenrsync 没有显示命令路径,请先安装缺少的工具。Ubuntu 或 Debian WSL 可以运行:

    language-shell
    sudo apt-get update
    sudo apt-get install openssh-client rsync

    其他 WSL 发行版请使用对应的软件包管理工具。安装完成后,重新运行上一步的 command -v 检查。

  3. 如果已经存在可用的密钥对,例如 ~/.ssh/id_ed25519~/.ssh/id_ed25519.pub,请继续使用,不要覆盖。如果没有密钥对,请在同一 WSL 发行版中创建:

    language-shell
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "wsl-aicoder"
  4. 输出公钥并复制完整的一行:

    language-shell
    cat ~/.ssh/id_ed25519.pub

    文件名以 .pub 结尾的是公钥,可以登记到平台。没有 .pub 后缀的 ~/.ssh/id_ed25519 是私钥,不得上传、粘贴到控制台或发送给他人。使用其他密钥文件名时,请相应替换命令中的路径。

  5. 按照管理 SSH 公钥的步骤,将刚才从 WSL 输出的公钥添加到平台。如果该 WSL 公钥已经登记,可以跳过重复添加。Windows OpenSSH 的公钥可以保留,但登记 Windows 公钥并不表示当前 WSL 发行版持有对应的私钥。

  6. 添加 WSL 公钥后,打开目标 AICoder Shell,并在窗口中点击一键重启。这是平台界面操作,不是在 WSL、PowerShell 或 AICoder 终端中执行的命令。必须等目标 AICoder 重启完成,新公钥才会生效。如果无法确认目标 AICoder 是否在登记该公钥后重启过,也应重启一次。

检查 rsync 版本和 SSH 连接

以下命令使用 --inc-recursive--info=progress2。先在 WSL 中检查本地版本,再通过 SSH 检查目标 AICoder;两端都应使用 rsync 3.1.0 或更高版本,但版本号不必完全相同:

language-shell
# 返回准备公钥时使用的同一个 WSL 发行版运行
command -v rsync
rsync --version
ssh -J <ssh-jumper> root@<aicoder-id> \
  'command -v rsync && rsync --version && findmnt -T /mnt/public/janedoe && test -w /mnt/public/janedoe && echo wsl-aicoder-ready'

只有两端都显示 rsync 3.1.0 或更高版本,findmnt 显示 /mnt/public/janedoe 位于共享存储文件系统而不是 / 或 OverlayFS,并且最后显示 wsl-aicoder-ready 时,才能继续。如果出现 Permission denied (publickey),请依次确认当前 WSL 发行版、$HOME、平台登记的公钥和目标 AICoder 重启状态。3.1.0 是兼容性最低要求,应优先使用 Linux 软件源提供的当前维护版本。版本、路径和内存控制的完整说明参见 AICoder 上传和下载文件

使用 rsync 上传数据

以下示例把 Windows 桌面目录通过 WSL 路径上传到共享存储:

language-shell
# 在同一个 WSL 发行版中运行;不要在 PowerShell 或 AICoder 终端中运行
test -d /mnt/c/Users/janedoe/Desktop/fromwin && \
  echo wsl-source-ready && \
  rsync -a \
    --no-owner \
    --no-group \
    --inc-recursive \
    --partial \
    --partial-dir=.rsync-partial \
    --info=progress2 \
    --human-readable \
    -e "ssh -T -o Compression=no -o ServerAliveInterval=30 -o ServerAliveCountMax=6 -J <ssh-jumper>" \
    /mnt/c/Users/janedoe/Desktop/fromwin/ \
    root@<aicoder-id>:/mnt/public/janedoe/fromwin/

只有先显示 wsl-source-ready 时,才说明示例源目录存在。请把路径中的 janedoefromwin 替换为实际值。/mnt/c 中文件的所有者和组来自 WSL 对 Windows 文件系统的映射,通常不应传到 AICoder;--no-owner --no-group 让目标文件由接收端账户持有。

初次传输只运行一个 rsync 进程。单个文件可以大于 AICoder 的 4 GiB 内存;内存压力主要来自文件条目数量和并发进程。包含数百万个文件时,应按一级子目录分批串行传输。rsync 在 WSL 中运行,因此 Windows 休眠可能断开连接,Windows 重启或执行 wsl --shutdown 会终止传输;WSL 中的 tmux 只能防止终端窗口关闭,不能防止 WSL 实例停止。更多说明参见 AICoder 上传和下载文件

常见问题

scp 与 sftp 的对比

选择合适的工具取决于具体需求:

scp

scp 更适合连接稳定时快速、单次地传输文件或小型目录。它的命令简单,但连接中断后通常需要重新传输当前文件,因此不应作为大量数据的默认方案。

优点:

  • 简单的命令结构
  • 支持递归复制文件夹(-r 选项)
  • 适合连接稳定时的单次传输

缺点:

  • 不提供交互式文件管理
  • 不提供可靠的断点续传

sftp

sftp 更适合需要对文件进行频繁操作或管理的用户。它提供了一个交互式 shell,可以方便地在远程和本地之间导航和传输文件。

优点:

  • 提供交互式文件管理
  • 支持部分文件传输命令(例如 putgetmputmget
  • 适合小文件和文件夹的传输

缺点:

  • 命令稍复杂
  • 对于大文件传输可能不如 scp 高效

提示

少量文件的单次传输可使用 scp,交互式管理小文件可使用 sftp;大文件、大量文件或需要断点续传时,使用 WSL 中的 rsync

如何使用 PSCP 上传和下载文件

由于 PSCP 本身限制,暂不支持通过通过跳板机使用 PSCP 上传和下载文件。