在深度学习项目中,模型的训练通常会在远程云服务器上进行。此过程会生成大量日志文件和模型文件(如检查点文件、模型权重等),这些文件对于后续的分析、调试和备份至关重要。本文将介绍如何使用 scp
命令,将云服务器上的文件夹下载到本地 Windows 系统,以便于进一步分析和备份。
场景说明
假设您已经在云服务器上完成了模型训练,相关的日志和检查点文件都保存在云端的指定文件夹中。现在,您希望将这些文件夹传输至本地系统进行分析和存档。
前期准备
开始操作之前,请确认您具备以下信息:
- 云服务器的 IP 地址 和 SSH 端口。
- 需要传输的文件夹的完整路径。
- 本地计算机的目标保存路径。
- 云服务器的登录凭据(例如,用户名和密码或 SSH 密钥文件)。
必备工具
在 Windows 系统上,通常可以通过以下几种方式来执行 scp
命令:
- Git Bash:Git for Windows 附带了
scp
工具。安装后,您可以直接在 Git Bash 中使用scp
命令。 - Windows Subsystem for Linux (WSL):在 Windows 10 及更高版本中,可以在 PowerShell(管理员模式)中启用 WSL 并安装 Linux 发行版(如 Ubuntu),在 WSL 环境中直接执行
scp
命令。 - 命令提示符或 PowerShell:Windows 自带的 cmd 和 PowerShell 也支持
scp
,不过需要确保scp
可用,且依赖版本兼容性。
scp
命令详解
scp
(secure copy)是基于 SSH 的文件传输工具,允许安全地在远程服务器与本地系统之间传输文件。其常用语法如下:
scp -P [端口号] -r [用户名@服务器地址]:[远程文件路径] [本地路径]
参数 | 解释 |
---|---|
-P [端口号] | 指定远程服务器的 SSH 端口。 |
-r | 递归传输整个文件夹,包括所有子文件夹和文件。 |
[用户名@服务器地址] | 指定连接到云服务器的用户名和服务器地址(IP 或域名)。 |
[远程文件路径] | 云服务器上要传输的文件或文件夹的完整路径。 |
[本地路径] | 将文件下载至本地的保存路径。 |
操作步骤
1. 打开终端
在 Windows 上,打开 Git Bash 或者 WSL 终端;如果使用的是 Windows 11,也可以直接使用 PowerShell 或 CMD。
2. 构造 scp
命令
假设以下信息已知:
- 远程服务器的 SSH 端口号为
33804
; - 用户名为
user
,服务器地址为cloud.server.com
; - 服务器日志和模型文件夹的路径为
/path/to/logs_and_models
; - 本地保存路径为
E:/MyData/Model_Backups
。
可以使用如下命令将云服务器上的文件夹传输至本地:
scp -P 33804 -r user@cloud.server.com:/path/to/logs_and_models "E:/MyData/Model_Backups"
该命令会将云服务器的 /path/to/logs_and_models
文件夹递归下载到本地 E:/MyData/Model_Backups
目录中。
3. 执行命令并输入密码
按下回车键后,系统可能会提示您输入云服务器的登录密码(如使用密码验证)。输入正确的密码后,传输将开始。若服务器配置了 SSH 密钥验证,则无需密码。
4. 等待文件传输完成
文件传输速度取决于文件大小和网络带宽,传输完成后即可在本地查看下载的文件。
示例命令解读
实际示例解析
以下示例帮助理解 scp
命令的具体操作:
scp -P 33804 -r user@cloud.server.com:/path/to/logs_and_models "E:/MyData/Model_Backups"
命令解读:
-P 33804
:指定服务器的 SSH 端口号。-r
:递归下载整个文件夹,包括子文件夹和所有文件。user@cloud.server.com
:远程服务器的用户名和主机地址。/path/to/logs_and_models
:远程服务器上的文件路径。"E:/MyData/Model_Backups"
:本地的目标保存路径。
常见问题和解决方法
-
连接失败:如果出现连接错误,通常原因包括 IP 地址、端口号、用户名或密码错误,以及网络连接不稳定。请确认以下几点:
- IP 地址、端口号和用户名是否正确。
- 服务器是否允许 SSH 连接,并确认 SSH 服务是否在目标端口运行(默认为端口 22)。
- 网络连接是否正常,尤其在防火墙或 VPN 环境下,请检查网络配置。
- 示例命令:
如果服务器使用了非默认端口,记得使用scp -P 22 user@remote_host:/path/to/file /local/path
-P
选项指定端口号。
-
权限错误:如果提示权限不足,可能是因为:
- 您在目标文件夹上没有访问权限。请确认您使用的用户名是否有相应的写权限。
- 若目标文件夹受限,可联系管理员获取授权。
- 在 Git Bash 或 WSL 中可能需要使用
sudo scp
(仅适用于具有 sudo 权限的账户)。
-
路径不存在:
scp
不会自动创建目标文件夹,如果本地或远程路径不存在会导致错误。建议:- 在传输前手动创建目标文件夹。对于本地路径,可以使用:
mkdir -p /local/path/to/destination
- 然后再运行
scp
命令完成传输。
- 在传输前手动创建目标文件夹。对于本地路径,可以使用:
-
网络中断:在传输大文件时,网络连接中断是常见问题。为提高传输稳定性,您可以:
- 使用
scp -C
开启压缩功能,这样可以减少数据传输量,从而减少中断几率:scp -C user@remote_host:/path/to/file /local/path
- 或考虑使用
rsync
作为替代方案。rsync
支持断点续传,适合大文件传输。
- 使用
-
传输进度查看:在
scp
中,添加-v
参数(verbose)可以显示详细的传输过程,便于监控每个文件的传输状态,帮助识别任何连接或传输问题。- 示例命令:
这样可以看到连接建立、认证、文件传输的具体细节。如果需要进一步的调试信息,可以使用多重scp -v user@remote_host:/path/to/file /local/path
-v
,例如-vvv
,获取更详细的调试输出。
- 示例命令:
-
建议:使用 SSH 密钥连接(替代密码连接):相比密码连接,使用 SSH 密钥连接更加安全、稳定,并减少了连接过程中输入密码的需求。配置 SSH 密钥验证可以帮助您实现无密码登录,避免因网络中断或超时导致的重复输入密码。
- 参考步骤:
- 首先生成 SSH 密钥对:
按照提示选择存放路径(通常为ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
~/.ssh/id_rsa
),并设置密钥密码(可选)。 - 将生成的公钥 (
id_rsa.pub
) 复制到服务器的~/.ssh/authorized_keys
文件中,可以通过以下命令完成:ssh-copy-id user@remote_host
- 完成设置后,您就可以在无密码的情况下使用
scp
命令进行传输:scp /local/path/to/file user@remote_host:/remote/path
- 首先生成 SSH 密钥对:
- 详细步骤和注意事项,请参考Windows 系统上配置 SSH 密钥验证,实现无密码登录-CSDN博客 。
- 参考步骤: