You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scp上传目录报错:为何需目标服务器存在同名目录?

scp上传目录报错"No such file"的原因分析

问题现象

使用scp -r上传本地目录到远程服务器主目录时,若远程主目录下不存在与本地目录同名的目录,会触发如下错误:

$ mkdir test_local
$ touch test_local/test_local.txt
$ scp -r ./test_local user@host.edu:
scp: realpath ./test_local: No such file
scp: upload "./test_local": path canonicalization failed
scp: failed to upload directory ./test_local to .

但在远程主目录手动创建同名空目录test_local后,scp即可正常同步本地目录内容到远程。已知原生scp无需提前创建目标同名目录,需排查异常原因。

可能的原因

  • 老旧scp版本的逻辑缺陷:部分早期OpenSSH版本(尤其是基于传统SCP协议的实现)在处理目录上传时,存在逻辑漏洞——当目标路径下无对应目录时,无法自动创建,反而错误抛出本地目录不存在的异常。
  • 远程目录权限异常:远程用户主目录的权限配置错误,导致scp进程无法在其中创建新目录。比如主目录权限为700但scp执行身份异常,或目录属主/属组与当前用户不匹配。
  • 远程路径解析工具故障:远程服务器的realpath命令或路径解析组件存在问题,导致scp在验证目标路径时,混淆了本地与远程的路径检查逻辑,误报本地目录不存在。
  • 非原生scp实现:部分系统的scp是第三方工具(如rsync)的封装版本,这类非原生实现可能存在逻辑偏差,要求目标目录提前存在。

验证与解决方法

  1. 检查远程scp版本:登录远程服务器执行scp -V,若为OpenSSH 7.x及更早版本,建议升级到最新稳定版。
  2. 核对远程主目录权限:执行ls -ld ~,确保目录权限为755或700,且属主为当前登录用户。
  3. 切换协议或工具:
    • 使用rsync替代:rsync -av ./test_local user@host.edu:
    • 强制使用传统SCP协议:scp -O -r ./test_local user@host.edu:(-O参数可规避部分SFTP协议的兼容性问题)

内容的提问来源于stack exchange,提问作者Elias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:40:21