scp -i /Downloads/class4.pem/ ec2-user@hostip: /home/ec2-user/test

scp -i /Downloads/class4.pem/ ec2-user@hostip: /home/ec2-user/test
scp -i /Downloads/class4.pem/ ec2-user@hostip: /home/ec2-user/test

我正在尝试将文件从本地 mac 上传到 ec 2,我做错了什么?

答案1

  • 与几乎所有涉及复制或移动文件的 unix 工具一样,应指定源文件目的地。而且,除非您使用 scp 的-r选项递归复制整个目录树,否则您还需要指定一个实际的文件名(或与一个或多个文件名匹配的 glob 模式)作为源。

  • 目标可以是单个完整文件名或目录(当复制多个文件或递归目录树时,应该是一个目录)。

  • scp当给定源或目标时,默认为用户的主目录user@host:(或者host:当本地用户名与远程用户名相同时,或者用户名由中的规则提供~/.ssh/config

  • 身份文件(即私钥)是文件,不是目录,所以/Downloads/class4.pem应该不是有一个尾随/.另请注意,身份文件不能被其他人访问 - 即它应该由正在运行的用户拥有scp,并且应该只能由该用户读取(例如权限 600 或 400)。

您的命令:

scp -i /Downloads/class4.pem ec2-user@hostip: /home/ec2-user/test

正在尝试复制 ec2-user@hostip: /home/ec2-user/test

这将失败并显示错误消息,例如scp: .: not a regular file因为ec2-user@hostip:没有指定实际文件并且您没有使用该-r选项。

如果您想将本地文件复制/home/ec2-user/test到 ec2-user 上的主目录hostip,请尝试以下操作:

scp -i /Downloads/class4.pem /home/ec2-user/test ec2-user@hostip:

如果test是目录而不是文件,并且您想要将整个目录复制到~ec2-user/test/in hostip,请使用-r

    scp -i /Downloads/class4.pem -r /home/ec2-user/test/ ec2-user@hostip:

或者仅将本地目录顶层的文件复制/home/ec2-user/test/到 hostip 上的远程用户ec2-user的主目录中:

    scp -i /Downloads/class4.pem /home/ec2-user/test/* ec2-user@hostip:

请注意,如果 test/ 存在任何子目录,这将生成错误消息(因为它们将与*glob 匹配,但您尚未使用-r)。

顺便说一句,虽然没有严格要求,但最好总是/在目录中有尾随。它可以防止灾难性的错误,特别是对于旧版本的实用程序,这些实用程序没有提供内置保护,可以防止意外地mv将数百个文件复制到一个文件中(除了最后一个移动的文件之外的所有文件都消失了!)。如果目标不是目录,则尾随 / 将导致 mv 失败。大多数现代版本的工具都会检测并防止此类错误,除非您不遗余力地覆盖该行为并强迫它们不要这样做。

尾随的 / 也是自记录的,很明显您想要复制到目录或从目录复制,而不仅仅是单个文件。


(*) 也有例外,但它们通常是覆盖常见做法的特定选项(即源在目标之前),并允许您将目标目录放在所有源文件之前。

例如,-t, --target-directory=DIRECTORYGNU 版本中的选项cpmv、等。这主要是为了方便起见,使这些程序更容易与其他程序(例如或 )ln一起使用(将源文件名列表添加到命令末尾比插入它们更容易在中间)。find ... -exec ...xargs

相关内容