scp from local to remote:本地传到远程命令详解

📅 Last Updated: 30 10 月, 2026
✅ Reviewed by: AnyDesk Editorial Team

本地文件传到服务器,最直接的办法之一是使用 scp。只要本机能通过 SSH 连接服务器,知道远程登录账号和目标目录,就可以在终端里完成单文件、多个文件或目录的复制。关键是把本地来源放在命令前面,把远程账号、主机和路径放在后面,并用冒号分隔主机与远程路径。

最基本的写法如下:

scp [选项] 本地文件 用户名@远程主机:远程目标路径

例如:

scp ./report.txt [email protected]:/home/alex/

这条命令从当前目录读取 report.txt,通过 SSH 连接到 server.example,再把文件写入远程账号 alex 的家目录。文中的主机名、账号、路径和端口均为示范值,执行前要换成实际连接信息。下文也会说明 scp from local to remote 的命令方向、常用选项、身份验证、传输核对和报错处理。

在开始前先明确一件事:scp 负责复制,不负责替你判断文件是否应该上传,也不会自动解决服务器上的账号权限、目录规划或数据保留问题。因此,最稳妥的做法不是背下一条命令后直接照抄,而是先核对来源、目标和连接方式,再执行复制,最后验证结果。对偶尔上传一个文件的人来说,这个流程只需几项检查;对需要复制目录或重要数据的人来说,预先确认内容和落点尤其重要。

先备齐本地文件和远程连接信息

scp 通常在本地计算机的终端中运行。命令的前半段是本地来源,后半段是远程目的地。远程位置采用 用户名@主机:路径 的结构:冒号左侧标出登录账号和服务器,右侧才是服务器上的目标路径。漏掉冒号,或把它放错位置,都会令命令无法按预期解析。冒号也有助于区分远程地址与普通本地路径,所以不要在主机名与远程路径之间加入空格。

执行前可以逐项核对:

项目 示例 需要确认的内容
本地来源 ./report.txt 文件名、扩展名和相对路径是否正确,文件是否存在
远程账号 alex 账号是否存在,是否获准通过 SSH 登录
远程主机 server.example 主机名或 IP 地址是否正确,当前网络能否解析或访问
远程目标 /home/alex/ 目录是否存在,账号是否有写入权限
SSH 端口 2222 服务器是否使用非默认端口,端口号是否由管理员确认
身份验证 密码或私钥 密码是否可用,或私钥路径是否正确

server.example 是文档示例域名,不指向真实服务器。若本地来源不确定,可以先检查:

ls -l ./report.txt

再单独测试 SSH 登录:

ssh [email protected]

如果服务器使用非默认端口,测试命令可写为:

ssh -p 2222 [email protected]

先把 SSH 连接问题解决,再执行文件复制,可以把网络或认证故障与文件路径、目录权限问题分开排查。登录账号应使用管理员分配的账号,不要假设服务器允许某个系统账号远程登录。能够连接服务器,也不代表目标目录必然允许写入;认证与文件写入是两个不同环节。测试连接时如果出现主机身份确认提示,应按照组织的连接流程核对主机指纹,不要在无法确认目标服务器时盲目接受。若这是首次连接,可向管理员确认主机名、端口和身份信息;若之前连接过而指纹突然变化,也应先查明原因。

本地路径含空格时,应保护整个路径。例如:

scp "./weekly report.txt" [email protected]:/home/alex/

远程路径也可能经过远程 shell 解释,因此空格、引号和通配符会受到客户端与远程 shell 组合的影响。遇到复杂路径时,先用不含空格的绝对路径测试,再逐步增加复杂部分。通配符也要谨慎:本地 shell 可能先展开它们,结果可能包含临时文件、备份文件或其他不应上传的内容。可以先列出匹配结果,再执行复制;若不确定展开规则,直接列明文件名通常更容易检查。

相对路径以运行命令时的当前目录为基准。若终端已经切换到别的目录,./report.txt 指向的位置也会随之变化。可先用 pwd 查看当前工作目录,再用 ls 核对文件;也可以改用确定的绝对路径。绝对路径较长,但在脚本或定时任务中通常更清晰,因为它不依赖启动命令时的工作目录。不要把本地路径误认为服务器路径:冒号前的来源在本地读取,冒号后的路径才在远程主机上解释。

按本地到远程的顺序写 scp 命令

单文件上传最常见的写法是:

scp ./report.txt [email protected]:/home/alex/

可以把顺序记成“本地文件、远程账号和主机、冒号、远程路径”。./report.txt 是本地来源;[email protected] 指定远端登录身份和主机;冒号后面的 /home/alex/ 是目标目录。若把远程位置写在前面,命令方向就会改变,可能变成从服务器下载到本地。操作前检查冒号的位置,能减少把文件传反方向的风险。

主机可以是可解析的名称,也可以是 IP 地址,例如:

scp ./report.txt [email protected]:/home/alex/

192.0.2.10 属于文档示例地址段,只用于说明格式,不能直接当作真实服务器地址。若使用 IP 地址,仍需确认该地址对应目标服务器,并且网络路由与访问策略允许连接。主机名和 IP 地址只决定连接到哪里,不会替代账号、目录或身份验证信息。

scp 是 OpenSSH 工具集中的文件复制命令,通过 SSH 连接与远程主机通信。从 OpenSSH 9.0 起,scp 默认使用 SFTP 协议传输文件;较旧的传统 SCP 协议模式仍可通过 -O 请求。客户端版本、服务器端配置以及远程可用服务会影响具体行为。遇到兼容性问题时,应先查看本机手册和服务器 SSH 配置,而不是盲目更改文件权限或反复更换认证方式。命令语法、选项及协议说明可查阅 OpenBSD《scp》手册。

可以按下面的顺序完成一次基础传输:

  1. 确认本地文件存在,并准备好远程账号、主机和目录。
  2. 把本地来源写在命令前半段。
  3. 在远程主机后加冒号,再写远端目录或文件名。
  4. 如需非默认端口或指定私钥,在来源文件前加入相应选项。
  5. 运行命令并完成密码或密钥认证。
  6. 通过 SSH 检查远程文件的路径、名称和大小。

这套操作适用于 Linux、macOS 终端和提供 OpenSSH 客户端的环境。Windows 上的终端、路径表达方式以及 SSH 客户端可能不同,应按实际终端的文档调整写法,不要将 Linux 路径示例原样套用于每一种 Windows shell。无论使用哪种系统,命令中的远程位置结构和“来源在前、目的地在后”的原则都相同;变化主要在本地路径写法、引号规则和客户端选项。若命令无法识别或选项行为与示例不同,应先确认实际调用的是哪一个 scp 客户端及其版本。

对于第一次上传,可先选一个无敏感信息的小文件测试目录和认证流程。测试的目的不是证明所有后续文件都能上传,而是确认主机、账号、端口、目标目录和权限配置基本正确。测试成功后,再传送正式文件;如果正式文件放入不同目录,仍须重新确认该目录的存在和写入权限。

上传到指定目录、改名或发送多个文件

若要把文件放到远程指定目录,把目录写在冒号之后:

scp ./report.txt [email protected]:/home/alex/incoming/

如果目标目录不存在,scp 不应被视为会自动创建目录的工具。可以先登录服务器检查:

ssh [email protected] 'ls -ld /home/alex/incoming'

这条检查可以帮助确认目录是否存在,并查看其基本权限信息,但具体能否写入仍取决于账号权限和目录配置。若需要创建目录,应通过获准的 SSH 操作或服务器管理流程完成,而不是假设上传命令会代为处理。共享目录、部署目录和系统目录可能有额外管理要求,写入前应确认预期落点。

需要在传输时更改远程文件名,就在远程路径末尾写入新名称:

scp ./report.txt [email protected]:/home/alex/incoming/report-2026.txt

这条命令仍然读取本地的 report.txt,但在远程保存为 report-2026.txt。上传前确认目录存在,也要注意目标位置若已有同名文件,可能发生覆盖。重要文件应先检查目标目录内容,确认不会替换不该覆盖的文件。若不希望覆盖旧版本,可以为目标文件选用明确且唯一的名称,或者先通过 SSH 检查目标是否已存在;不要仅凭文件名推断远程目录里没有同名文件。

若要上传多个明确的本地文件,可将来源逐个列出,并把远端位置放在最后:

scp ./report.txt ./notes.txt [email protected]:/home/alex/incoming/

命令中的每个本地文件都必须存在。尽可能使用明确的文件名,避免让通配符匹配到无关内容。执行前可先查看通配符会匹配哪些文件:

printf '%s\n' ./*.txt

实际展开方式取决于当前 shell。若列表中出现不需要上传的文件,应改用明确的文件名,或先整理出只包含目标内容的目录。多个来源文件通常会复制到同一个远程目标目录;若需要分别放到不同的远程目录,应分开运行命令,便于逐次核对目的地和结果。

远程路径中有空格时,可以尝试将远程位置整体引用,例如:

scp ./report.txt '[email protected]:/home/alex/weekly reports/'

远程路径会由客户端和服务器端 shell 共同处理,引号规则可能因客户端、版本和 shell 而异。若出现路径不存在的提示,先通过 SSH 查看远端实际目录,再核对大小写、空格、斜线和引号。不要假定本地路径和远程路径的引用规则完全相同。尤其是路径中同时包含空格、引号或通配符时,应先用简化路径验证连接,再按照所用客户端的手册调整引用方式。

任务 命令结构 要替换的部分
上传到远程目录 scp 本地文件 用户名@主机:/远程目录/ 本地文件、账号、主机和目录
上传并改名 scp 本地文件 用户名@主机:/远程目录/新文件名 目标目录与新文件名
上传多个文件 scp 文件一 文件二 用户名@主机:/远程目录/ 每个来源文件及远端目录
复制整个目录 scp -r 本地目录 用户名@主机:/远程父目录/ 本地目录、账号、主机和远程父目录

读取这张表时,要将“目标目录”与“目标文件名”区分开来:路径末尾是目录时,文件通常以原名称保存在其中;路径末尾写了新的文件名时,则表示目标名称。若目标目录不存在,或路径被解析成与预想不同的形式,命令可能失败或落到非预期位置。因此,第一次处理重要路径时,使用小文件测试并通过 SSH 检查结果,比一次性提交大量文件更稳妥。

复制目录、指定端口和私钥

上传整个本地目录时,使用小写 -r:

scp -r ./project [email protected]:/home/alex/backups/

-r 表示递归复制目录及其内容。通常,远程目标 /home/alex/backups/ 应已存在并允许该账号写入;复制后,目标位置下会出现 project 目录。若目的是把目录中的内容放入另一层目录,来源路径、目标路径和客户端行为都要仔细核对。可先用一个小目录试传,确认落点和目录层级后,再处理正式内容。目录越大,越值得在传输前检查其中的文件,避免把无关数据一并发送。

递归复制可能包含子目录和其中的文件,所以上传前应确认目录内容、大小和敏感程度。不要把整个工作区当作一个无差别的来源:其中可能有临时输出、缓存、旧备份、配置文件或不适合传到服务器的资料。需要只上传一部分内容时,先整理好待传文件,或明确列出所需项目,而不是依赖一个宽泛的通配符。复制完成后,再检查远程目录层级与文件清单是否符合预期。

非默认 SSH 端口使用大写 -P:

scp -P 2222 ./report.txt [email protected]:/home/alex/

大小写不能混淆:scp 的 -P 指定端口,-r 用于递归复制目录。SSH 命令常用小写 -p 指定端口,因此不能把 SSH 的端口参数直接照搬给 scp。示例中的 2222 仅用于展示格式,应使用管理员提供的端口号。若同时使用端口和其他选项,将选项放在本地来源之前,例如 scp -P 2222 -i ~/.ssh/project_key ./report.txt 用户名@主机:/目标目录/;执行前仍要分别确认每个参数的大小写和路径。

指定私钥时,用 -i 加上本地私钥路径:

scp -i ~/.ssh/project_key ./report.txt [email protected]:/home/alex/

应将 ~/.ssh/project_key 换成实际密钥文件路径。若命令仍要求输入密码,可能是服务器没有接受这把密钥、用户名不匹配、客户端没有使用预期密钥,或服务器还要求其他认证步骤。可以用相同的账号、主机、端口和密钥选项单独测试 SSH。不要把私钥内容粘贴到命令行、聊天记录或文档中。私钥权限、密钥格式和客户端配置会因系统而异,可查阅 OpenBSD《ssh》手册 及所用系统的 OpenSSH 文档。

私钥路径是本地文件路径,不是服务器上的路径。指定路径时,检查当前用户是否能读取密钥文件,文件名和目录是否拼写正确。若密钥带有口令,客户端可能会提示输入口令;这与远程账号密码不是同一种凭据。不要为了消除提示而移除密钥保护,也不要把私钥权限放宽到其他用户都可读取。若使用密钥代理或系统提供的凭据管理方式,客户端的实际认证顺序可能不同,应以 SSH 测试结果和系统文档为准。

选项 用途 示例
-r 递归复制目录 scp -r ./project 用户名@主机:/目标目录/
-P 指定 SSH 端口,注意大写 scp -P 2222 ./file 用户名@主机:/目录/
-i 指定身份私钥文件 scp -i ./key ./file 用户名@主机:/目录/
-O 请求旧式 SCP 协议模式 scp -O ./file 用户名@主机:/目录/

-O 不是普通上传的必需选项。只有在客户端或服务器需要兼容旧式 SCP 行为时,才考虑使用,并先确认双方支持情况。日常单文件传输通常从不带额外选项的基础命令开始即可。选项越多,越需要逐一确认用途;如果只是普通文件上传,先用最简命令能减少拼写和参数组合造成的问题。

传输后核对,并按报错位置排查

命令结束后,先确认终端没有报告连接、认证或写入错误,再通过 SSH 检查目标文件:

ssh [email protected] 'ls -lh /home/alex/report.txt'

如果文件上传到了子目录,或传输时改了名字,应将命令中的路径替换为实际目标。ls -lh 可以显示文件是否存在及其可读大小。对重要文件、连接不稳定的传输,或要求逐字节核对的流程,可以分别在本地和远端生成校验和并比较;具体命令取决于系统。文件大小一致不能单独证明内容完全一致。若校验和不一致,不应把远程副本当作已验证版本,应重新检查传输是否完整、核对使用的文件和算法,并按工作流程重新传输或报告问题。

检查时至少确认以下事项:

  • scp 正常结束,没有报告认证、连接或写入错误。
  • 核查时使用了与上传命令相同的账号和主机。
  • 远程目录、文件名和扩展名符合预期。
  • 文件大小看起来合理;需要严格核对时,再比较校验和。
  • 若复制的是目录,确认实际目录层级和其中应有的文件。

Permission denied 可能发生在 SSH 身份验证阶段,也可能出现在远程写入阶段。先判断错误出现的时点,不要一看到提示就贸然修改权限。连接建立前失败,通常应先检查用户名、密码、密钥以及服务器的认证设置;连接成功但写入失败,则应查看目标目录和同名文件的写入权限。区分这两种情况,可以避免把账号认证问题误当作目录权限问题,或反过来。

报错或现象 先检查什么 后续处理
Permission denied,尚未登录 用户名、密码、密钥,以及服务器是否接受该身份 用相同账号单独运行 ssh 用户名@主机,核对密钥选项和账号
Permission denied,连接已建立但写入失败 远程目录权限、目标文件是否可覆盖、账号是否能写入 用 SSH 运行 ls -ld 远程目录,改用有权限的目录或请管理员处理
No such file or directory 报错指向本地来源还是远程目标 本地用 ls -l 本地路径;远端用 SSH 检查路径拼写和目录是否存在
主机名无法解析 主机名拼写、域名解析,以及是否应使用 IP 核对连接资料,并确认当前网络能解析该名称
连接超时或被拒绝 主机地址、端口、网络可达性和 SSH 服务状态 用相同主机与端口测试 SSH,并向管理员确认服务器信息
文件落在错误层级 冒号后的远端路径、目录末尾斜线和本地来源 先用单个测试文件确认落点,再传正式内容
目录内容没有完整复制 是否加入小写 -r,来源是否确为目录 检查参数和实际复制的目录,再核对目标内容

遇到权限问题,不要随意运行范围过大的权限变更命令,也不要把文件写入不属于自己的系统目录。若认证失败,通常还没进入远程目录权限的排查阶段;若 SSH 登录成功而写入失败,应优先检查目标目录,而不是反复更换密码。连接失败可能与主机名解析、端口、防火墙策略或服务器状态有关,单凭一条报错通常不能锁定唯一原因。将错误发生阶段、目标路径和使用的选项记下来,再逐项验证,通常比一次改动多项设置更容易找到问题。

排查 No such file or directory 时,先看错误文本针对的是哪个路径。若本地来源不存在,检查当前工作目录、大小写、文件扩展名和拼写;若远程目标不存在,先登录服务器确认父目录是否存在,必要时使用获准方式建立目标目录。不要仅仅因为远程路径看起来像一个常见目录,就假设它一定存在。路径中有空格时,也要确认本地 shell 是否把整个路径作为单一参数传入,以及远端 shell 是否按预期处理。

如果连接超时或被拒绝,检查主机名或地址、端口和网络访问条件;同一组连接资料可用于单独运行 SSH 测试。超时、拒绝连接和认证失败代表不同阶段的问题,不应统一通过更换文件权限来处理。若网络或服务器由他人管理,向管理员提供准确的报错、时间、主机和端口信息,通常更利于定位;不要在公开渠道附上密码、私钥或不必要的敏感文件内容。

SCP、SFTP、rsync 与图形化传输如何选择

一次上传少量文件、路径明确,或需要把传输写入脚本时,scp 命令通常够用。若需要在交互式界面浏览远端目录,可以考虑 SFTP 客户端。若经常同步目录或需要按同步任务组织操作,可以了解 rsync;它的参数和工作方式不同,本文不展开配置。已经在远程桌面会话中处理文件时,图形界面传输也可能更顺手。选择工具时,除了操作习惯,还要确认服务器是否提供相应服务、账号是否获准使用,以及任务是否要求保留目录结构或反复同步。

任务情形 可考虑的方式
一次上传少量文件,路径已知 scp 命令
想在界面中浏览远端目录并选择文件 SFTP 图形客户端
多次同步目录或纳入脚本流程 rsync,先核对同步方向和参数
已在远程桌面工作,希望通过界面处理文件 AnyDesk 文件传输等图形化方式

AnyDesk 提供远程访问和远程桌面软件,也提供图形化文件传输。其远程文件传输功能说明可用于了解功能及适用场景;需要查看操作步骤时,可参阅AnyDesk 图形化文件传输说明。这类功能与 scp 不是同一种协议或命令行实现,不能据此推断速度、兼容性或安全性一定更好。若工作内容已从单次传文件扩展到持续操作远程计算机,可进一步了解AnyDesk 远程桌面软件的用途与适用场景。

选择工具时,先看任务本身:明确路径、脚本或一次性传输,使用 scp 通常直接;需要图形化浏览,考虑 SFTP 客户端或适合当前远程桌面流程的文件传输方式;需要重复同步目录,则先评估 rsync。工具的选择取决于操作习惯、服务器支持和传输任务,不必为了复制一个文件增加额外步骤。若服务器只开放特定协议或有组织规定,应优先遵从管理要求,而不是只按个人习惯选择工具。对于自动化任务,还需检查脚本的执行账号、路径和错误处理,避免把交互式终端中可用的设置误认为脚本环境中也一定可用。

常见问题

SCP 是否使用 SSH?

是。scp 通过 SSH 连接与远程主机通信。从 OpenSSH 9.0 起,客户端默认采用 SFTP 协议传输文件;旧式 SCP 协议模式仍可通过 -O 请求。认证成功不代表目标目录可写,登录权限和文件写入权限需要分别检查。可从安全外壳协议:维基百科了解 SSH 的基本概念,具体命令行为应以 OpenSSH 手册为准。

为什么端口选项是大写 -P?

scp 使用大写 -P 指定端口,小写 -r 用于递归复制目录。大小写代表不同选项。使用非默认端口时,把 -P 端口号 放在本地来源之前,例如:

scp -P 2222 ./file 用户名@主机:/目录/

怎样递归复制整个本地目录?

在命令中加入小写 -r,并将本地目录放在远程目标之前:

scp -r ./project [email protected]:/home/alex/backups/

先确认远程父目录存在且账号有写入权限。传输后用 SSH 查看实际目录层级,避免把目录或其中的文件放到意外位置。目录内若含不应上传的内容,应先检查并整理来源。

怎样指定 SSH 私钥?

用 -i 加上本地私钥路径,例如:

scp -i ~/.ssh/project_key ./report.txt [email protected]:/home/alex/

确认用户名、主机和密钥路径相符。若仍出现密码提示或认证失败,使用相同参数单独测试 SSH,并检查服务器是否接受该身份。不要公开私钥内容;密钥口令提示也不等同于远程账号密码提示。

Permission denied 应怎样判断原因?

若连接建立前就报错,先核对远程用户名、密码、私钥和认证设置。若连接已建立,或文件传输开始后才报错,应检查目标目录的写入权限及目标文件是否可覆盖。用 SSH 查看远程目录,再选择账号有权写入的位置。不要把认证失败和目录写入失败混为一谈。

怎样确认文件确实上传完成?

确认 scp 正常结束后,用 SSH 执行 ls -lh 检查文件是否存在、名称和大小是否合理。重要文件可在本地与远端分别生成校验和并比较;具体命令按操作系统选择。目录上传还要检查实际层级与预期文件是否齐全。若大小不符或校验结果不同,应继续调查,不要把传输视为已核验完成。

路径有空格,或提示文件不存在怎么办?

本地路径可以用引号括起,例如 "./weekly report.txt"。远程路径也需要谨慎处理引号,因为客户端和远程 shell 都可能参与解析。遇到 No such file or directory,先判断报错指向哪一端,再分别检查本地来源和远程目标。逐字核对大小写、空格、斜线和文件名,通常比反复改权限更有效。

scp 上传前是否会自动创建远程目录?

不要假设它会创建目标目录。先用 SSH 检查远端目录是否存在,再确认当前账号有写入权限。若目录不存在,应通过获准的管理方式创建,或改用账号有权写入的已有目录。这样也能在传输前确认文件会落到预期位置。

scp 指定端口时选项放在哪里?

把 -P 端口号 放在本地来源之前。完整结构如下:

scp -P 2222 ./report.txt [email protected]:/home/alex/

如果端口号不确定,应向服务器管理员核实。不要将 SSH 命令的小写端口选项误用于 scp。

上传多个文件时,怎样避免传错内容?

可以把多个来源文件逐个列在命令中,确认每个路径都存在,并把远程目录放在最后。若使用通配符,先查看它会匹配哪些文件;匹配结果中有无关文件时,改为明确列出文件名。多个文件通常会进入同一个远程目录;要放到不同位置时,分开传输并分别核对,能让目标更清楚。

传输结束但找不到文件时,先检查什么?

先确认上传命令中的账号、主机和冒号后的路径,再用同一账号登录服务器查看目标目录。留意上传时是否指定了新文件名、路径末尾是否代表目录,以及是否误把相对路径当成绝对路径。如果复制的是目录,检查目标下是否多出一层来源目录。也应确认核查时连接的是同一台主机,而不是使用了不同别名或环境。

实际操作时的简明核对

记住基本格式:scp 本地来源 用户名@主机:远程路径。先确认本地文件存在,再用 SSH 验证账号、主机和端口,接着选择目标目录并运行传输。单文件上传无需额外选项;复制目录加 -r;指定非默认端口用大写 -P;指定私钥用 -i。传输完成后,再通过 SSH 检查文件名、位置和大小。这样做既能减少路径写错,也能把认证、网络和写入权限问题分别定位。

依次核对本地来源、远程目标、SSH 连接和传输结果,确认文件路径、身份、权限及文件是否完整。

实际执行时,可将流程压缩为四个检查点:来源是否正确、目标是否明确、连接是否可用、结果是否验证。来源检查关注文件名和当前目录;目标检查关注远程账号、主机、路径及是否可能覆盖旧文件;连接检查通过 SSH 确认认证和端口;结果检查则查看文件是否存在、大小是否合理,必要时比较校验和。目录、多个文件或带空格路径会增加出错可能,更应先缩小测试范围,再传正式内容。

如果命令失败,先不要连续改动多个参数。判断失败发生在本地读取、SSH 连接、身份验证还是远程写入阶段,再针对该阶段核对信息。路径错误就检查拼写和层级;连接问题就确认主机与端口;认证问题就验证账号和密钥;写入问题就检查目标目录权限。一次只改变一个已知因素,能让排查结果更容易解释,也能避免无意中扩大权限或把文件写到错误位置。

来源

Related: 远程访问服务器的完整方法