上传和下载文件(Windows)
AICoder 是智算云平台上的一个云端辅助开发环境,提供免费的 CPU 实例,专为管理和辅助 AI 工作负载而设计。
AICoder 支持通过跳板机使用 scp、sftp,或通过 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 连接命令格式如下:
ssh -J ssh-jumper.neogpu.com username@aicoder_id例如,用户 Jane Doe 的 SSH 连接命令为:
ssh -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6broot 为默认 SSH 登录用户名(部分旧版实例展示为非 root 普通用户名,请按照 SSH 远程连接中的界面步骤重启实例),aic-c8lkg5b88mieqw6b 是 AICoder 实例的 ID。请记录用户名与实例 ID(username@aicoder_id),在后续的文件传输过程中,我们会使用该字符串代表需要连接的 AICoder 实例。
提示
- 即使您重置、重启 AICoder 实例,实例 ID 仍保持不变,因此您无需担心连接地址变更。
- 但是,如果您在不同可用区打开 AICoder,您会注意到 AICoder 实例的 ID 并不相同。一般情况下,租户的资源池均在同一个可用区。
确认共享存储目标路径
/mnt/public 只是共享存储挂载路径示例。开始传输前,在本地 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 启动界面配置存储卷。
确认挂载后,可以创建示例子目录:
ssh -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b "mkdir -p /mnt/public/janedoe"使用 scp 和 sftp
通过跳板机使用 scp 和 sftp 上传和下载文件的命令格式如下:
新手提示
上传、下载操作均需要在本地计算机运行命令(scp/sftp),不需要在目标 AICoder 或开发机上运行命令。
安装 OpenSSH
- 打开 "设置" 应用,进入 "应用" -> "可选功能"。
- 点击 "添加功能" 并选择 "OpenSSH Client" 进行安装。
使用 scp 上传文件
scp -J ssh-jumper.neogpu.com localfile username@aicoder_id:/remotefile例如,用户 Jane Doe 将本地文件直接上传到 AICoder 挂载的共享存储目录 /mnt/public/janedoe:
scp -J ssh-jumper.neogpu.com C:\Users\janedoe\Desktop\v2.jpg root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/使用 scp 下载文件
scp -J ssh-jumper.neogpu.com username@aicoder_id:/remotefile localfile例如,用户 Jane Doe 将 AICoder 上的文件下载到本地目录 C:\Users\janedoe\Desktop:
scp -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/v2.jpg C:\Users\janedoe\Desktop\使用 scp 上传文件夹
scp -r -J ssh-jumper.neogpu.com localfolder username@aicoder_id:/remotefolder例如,用户 Jane Doe 将本地文件夹 myfolder 上传到共享存储目录 /mnt/public/janedoe:
scp -r -J ssh-jumper.neogpu.com C:\Users\janedoe\Desktop\myfolder root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/使用 scp 下载文件夹
scp -r -J ssh-jumper.neogpu.com username@aicoder_id:/remotefolder localfolder例如,用户 Jane Doe 将 AICoder 上的文件夹 myfolder 下载到本地目录 C:\Users\janedoe\Desktop:
scp -r -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/janedoe/myfolder C:\Users\janedoe\Desktop\使用 sftp 上传和下载文件
通过跳板机建立 sftp 连接的命令格式如下:
sftp -J ssh-jumper.neogpu.com username@aicoder_id例如,用户 Jane Doe 与 AICoder 平台建立 SFTP 连接:
sftp -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b进入 SFTP 界面后,使用 put 上传文件:
sftp> put localfile remotefile例如,从本地上传文件到 AICoder:
sftp> put C:\Users\janedoe\Desktop\v2.png /mnt/public/janedoe/使用 get 下载文件:
sftp> get remotefile localfile例如,从 AICoder 下载文件到本地:
sftp> get /mnt/public/janedoe/v2.png C:\Users\janedoe\Desktop使用 sftp 上传和下载文件夹
SFTP 可通过 -r 选项递归传输整个文件夹。
使用 -r 选项
这是最直接的方法,可以递归地上传或下载文件夹及其内容。
上传文件夹(格式):
sftp> put -r localdir /remote/path效果:
/remote/path/
├── file1.txt
└── file2.txt简而言之,这个命令会将本地机器上 localdir 目录内的内容,包括所有子目录和文件,复制到远程服务器的 /remote/path 目录下。
例如,用户 Jane Doe 需要将本地目录 C:\Users\janedoe\desktop\fromwin 上传到共享存储的 /mnt/public/janedoe/fromwin 路径。在 Windows 上,需要在远程路径中明确指定 fromwin。
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>下载文件夹:
sftp> get -r remotefolder localfolder例如,用户 Jane Doe 需要将共享存储中的 /mnt/public/janedoe/myfolder 下载到本地目录 C:\Users\janedoe\Desktop\ 下。
sftp> get -r /mnt/public/janedoe/myfolder C:\Users\janedoe\Desktop\myfolder注意
使用 -r 选项时要小心,它会覆盖目标位置的现有文件。
mput * 和 mget * 只适合匹配当前目录中的多个文件,不能替代递归目录传输。包含子目录时请使用上面的 put -r 或 get -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 公钥
打开后续实际用于传输的 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如果
ssh、ssh-keygen或rsync没有显示命令路径,请先安装缺少的工具。Ubuntu 或 Debian WSL 可以运行:language-shellsudo apt-get update sudo apt-get install openssh-client rsync其他 WSL 发行版请使用对应的软件包管理工具。安装完成后,重新运行上一步的
command -v检查。如果已经存在可用的密钥对,例如
~/.ssh/id_ed25519和~/.ssh/id_ed25519.pub,请继续使用,不要覆盖。如果没有密钥对,请在同一 WSL 发行版中创建:language-shellmkdir -p ~/.ssh chmod 700 ~/.ssh ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "wsl-aicoder"输出公钥并复制完整的一行:
language-shellcat ~/.ssh/id_ed25519.pub文件名以
.pub结尾的是公钥,可以登记到平台。没有.pub后缀的~/.ssh/id_ed25519是私钥,不得上传、粘贴到控制台或发送给他人。使用其他密钥文件名时,请相应替换命令中的路径。按照管理 SSH 公钥的步骤,将刚才从 WSL 输出的公钥添加到平台。如果该 WSL 公钥已经登记,可以跳过重复添加。Windows OpenSSH 的公钥可以保留,但登记 Windows 公钥并不表示当前 WSL 发行版持有对应的私钥。
添加 WSL 公钥后,打开目标 AICoder Shell,并在窗口中点击一键重启。这是平台界面操作,不是在 WSL、PowerShell 或 AICoder 终端中执行的命令。必须等目标 AICoder 重启完成,新公钥才会生效。如果无法确认目标 AICoder 是否在登记该公钥后重启过,也应重启一次。
检查 rsync 版本和 SSH 连接
以下命令使用 --inc-recursive 和 --info=progress2。先在 WSL 中检查本地版本,再通过 SSH 检查目标 AICoder;两端都应使用 rsync 3.1.0 或更高版本,但版本号不必完全相同:
# 返回准备公钥时使用的同一个 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 路径上传到共享存储:
# 在同一个 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 时,才说明示例源目录存在。请把路径中的 janedoe 和 fromwin 替换为实际值。/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,可以方便地在远程和本地之间导航和传输文件。
优点:
- 提供交互式文件管理
- 支持部分文件传输命令(例如
put、get、mput、mget) - 适合小文件和文件夹的传输
缺点:
- 命令稍复杂
- 对于大文件传输可能不如
scp高效
提示
少量文件的单次传输可使用 scp,交互式管理小文件可使用 sftp;大文件、大量文件或需要断点续传时,使用 WSL 中的 rsync。
如何使用 PSCP 上传和下载文件
由于 PSCP 本身限制,暂不支持通过通过跳板机使用 PSCP 上传和下载文件。