漏洞

漏洞

我正在编写一个 shell 脚本,用于使用scp.如果目标目录不存在,我会收到一条误导性的错误消息。 IE:

scp user@remote-host:/path/to/existing/file /local/non-existing/directory/

我收到的错误是:

/local/non-existing/directory/: Is a directory

这是令人费解的......我希望是这样的:

Directory /local/non-existing/directory/ does not exist
  1. 这对任何人都有意义还是只有我有意义?
  2. 你认为这是scp的缺陷吗?
  3. 我运行的是 Ubuntu 14.04.3 LTS,其他操作系统也一样吗?

答案1

漏洞

找到了相关错误。它似乎在 Ubuntu 14.04.5 中已修复(openssh 1:6.6p1-2ubuntu2.8)

有一个关于a的解释红帽错误报告

这个问题在原始 openSSH 中也存在,当您尝试将某些内容复制到具有现有父目录的不存在目录中时,就会出现此问题。缺少对该边界条件的检查。当 scp 进程尝试写入上述文件时,会抛出错误消息,但该文件以斜杠结尾(这是目录的解释),这就是当前错误消息的原因。

原答案

无法重现(在 Ubuntu 14.04.5 LTS 和 Linux Mint 17 上测试)

  • 如果/local/non-existing/directory不存在,则scp失败并显示:

    /local/non-existing/directory: No such file or directory
    
  • 如果/local/existing/directory存在,scp则复制file/local/existing/directory/file

  • 如果remote-host:/path/to/existing/file是目录,则scp失败并显示:

    scp: file: not a regular file
    

故障排除

ssh user@remote-host "file /path/to/existing/file"

应该为您提供有关远程文件(或可能的目录)的信息。

file /local/non-existing/directory/

应该为您提供有关本地目录的信息

mkdir -p /local/non-existing/directory/

将递归创建目录以及任何父目录(如果需要)。

之后mkdir -p,如果file确实是一个文件并且/local/non-existing/directory/确实是一个目录,那么您的scp命令应该可以工作。

相关内容