如何使用 SSH 将文件夹从本地计算机正确复制到服务器?为什么 scp 命令会出现错误?

如何使用 SSH 将文件夹从本地计算机正确复制到服务器?为什么 scp 命令会出现错误?

我通过以下方式登录到我的网络服务器SSH使用名为摩巴Xterm(它有点像 Putty,但具有高级功能,所以这并不那么重要......)

我的问题是我想将目录从我的本地计算机(Windows)发送到该服务器(Linux)的特定目录。

所以我尝试使用SCP命令如下所示:http://www.hypexr.org/linux_scp_help.php

我是这样做的:

-jailshell-4.1$ scp -r C:\Users\Andrea\Documents\Betrivius\candycane-0.9.6\candycane /home6/XXX/public_html

ssh: Could not resolve hostname C: Name or service not known

但是,正如您所看到的,我遇到了一个错误。

为什么?我遗漏了什么?我该如何解决这个问题?

谢谢

答案1

假设您正在本地 MobaXterm shell(即 Windows 机器本地)中运行此命令。如果是这种情况,您需要更新 scp 命令语法以适应该环境,尽管无论如何语法都是不正确的。

MobaXterm 通过挂载点在其外壳中提供对本地驱动器的访问/drives/X,其中 X 是 Windows 驱动器号。

此外,无论环境如何,scp 的(简化)一般语法是:

scp用法:

scp [[user@]host1:]/path[/filename] [[user@]host2:]/path/[filename]

第一个序列 ( [[user@]host1:]/path[/filename]) 是“FROM”部分;要复制的文件的来源。第二个是“TO”;目的地。括号表示可选参数。

它实际上只是标准 cp 命令的 ssh 启用版本;其中之前的部分包含:ssh 特定的信息,之后的信息涉及 cp 操作。

用户:

user默认为您当前的本地用户名 - 如果这是源和目标中的正确用户名,则可以省略。

主持人:

host默认为本地计算机(localhost);因此如果您要复制到/从本地计算机并且要使用的 localhost 上的用户名是当前用户,则可以省略本地文件的该参数。

文件路径:

path/filename默认为指定的用户主目录,如果需要,可以省略。在执行递归复制时,可以省略文件名,就像您的情况一样 - 在这种情况下只需提供路径。通常,在 FROM 部分中指定完整路径和文件名,在 TO 部分中仅指定路径(它将默认保留相同的文件名)。

我使用remoteuserremotePC作为用户名和远程 PC 主机名;请用正确的名称替换。

示例中的正确语法:

 scp -r "/drives/C/Users/Andrea/Documents/Betrivius/candycane-0.9.6/candycane" remoteuser@remotePC:/home6/XXX/public_html

使用命令man scp本网站了解更多详细信息(参数、其他使用信息)。

GUI 选项

另外,MobaXterm 提供了一个图形文件浏览器(基于配置选项建立在 sftp 或 scp 上),当您通过 ssh 连接到远程主机时,它可以提供拖放双向文件传输。详情请见此处

答案2

除非该 Web 服务器有办法直接连接到您的 Windows 计算机(在端口 22 上,这需要运行 SSH 守护程序以及转发端口),否则您将需要从 Windows 端调用 SCP。MobaXTerm 是一个 ssh 客户端,我不确定它是否内置了 SCP(我个人不使用它),但这里最好的解决方案是使用 SCP 客户端,无论是命令行客户端还是 GUI 客户端。

一个相当流行的 Windows 客户端是温SCP,当我别无选择只能使用 Windows 时,它就是我的首选客户端。

答案3

回答

为什么 scp 命令会出错?

,错误是

ssh: Could not resolve hostname C: Name or service not known

,并且使用的命令是

scp -r C:\Users\Andrea\Documents\Betrivius\candycane-0.9.6\candycane /home6/XXX/public_html

我会说:

语法C:\Users\....错误。在这种情况下,您有两种可能来描述路径:

  1. foo/bar/...:表示foo从您的路径来看该目录(文件夹)可见,它可能是您的当前路径(pwd)或路径环境变量(echo $PATH)。

  2. /foo/bar/...表示它foo是位于文件系统根目录的一个目录(文件夹)。

由于您使用了第一个选项(因为“C:”之前没有“/”),shellC:在路径中搜索,但找不到。因此,它尝试匹配另一种语法:[user@]host1:/path/..../filename。在这种情况下,ssh 会抱怨,因为它找不到 IP 地址C:(因为它认为这C:是主机名)。查找与主机名相对应的 IP 地址称为“主机名解析“;这里这个解析失败了,所以你明白了这个错误。

答案4

在 Windows 中,以下命令对我有用:- scp -r“引号中的 Reqd.Folder 名称”用户名@remote_server:服务器上的文件路径

scp -r “ABC” shivam@remote_server:/media/External/shivam。

在执行之前移动到所需文件夹所在的文件夹

相关内容