使用scp将Windows本地文件复制到远程服务器

104

我尝试通过 sshscp 将一个文件夹从我的本地计算机传输到服务器。在获得了 sudo 权限之后,我使用以下命令:

scp -r C:/desktop/myfolder/deployments/ user@host:/path/to/whereyouwant/thefile

然而,我遇到了以下错误:

ssh: C:名称或服务未知

我猜这是由于我的语法中包含了 C:/desktop 等内容。有任何想法吗?

顺便说一下,我正在使用 Putty 和 Windows 7。


2
在Windows/DOS上的标准路径是使用反斜杠\,因此请尝试C:\desktop\myfolder\deployments. - Cornel Ghiban
2
没有任何非GUI解决方案适用于我。我收到错误信息:fork: 没有那个文件或目录。我可以通过ssh连接到目标,也可以在源目录下执行dir命令。 - motorbaby
7个回答

94
如果您的驱动器字母是C,那么您应该能够使用以下命令:scp -r \desktop\myfolder\deployments\ user@host:/path/to/whereyouwant/thefile。请注意不要带驱动器字母且使用反斜杠代替正斜杠。
由于您正在使用putty,因此可以使用 pscp,它更适合Windows系统。

scp -r root@31.222.168.64:/var/www/vhosts/mywork \test --- 我添加了这段代码,它会在我的服务器上创建一个名为test的文件夹,而不是在本地计算机上。 scp -r root@31.222.168.64:/var/www/vhosts/mywork D:\test --- 出现错误:“ssh: Could not resolve hostname D: Name or service not known lost connection”。 - pTi
@pTi 你使用的是哪个 scp?如果你使用的是Cygwin的 scp,你可以将路径设置为 /cygdrive/d/test。为了避免使用 /cygdrive,你可以运行 mount --change-cygdrive-prefix / 命令,这样路径就会变成 /d/test - Serkan Yilmaz
不确定是隧道相关还是Windows 10中scp版本的特定问题,但经过多次尝试和错误,我必须使用以下语法: scp -P <端口> -r ./本地目录 用户@主机:"D:\远程目录" - serigado

36

驱动器字母可以在目标位置中使用

scp some_file user@host:/c/temp

其中c是驱动器盘符,它被视为目录。

或许这也适用于源文件。


14
谢谢这个“简单”且“有效”的答案,不会让我使用其他软件或任何其他东西!我在网上寻找的就是这样的答案,没有人直接回答这个问题... - Benj
1
这个无法获取文件。 - Jorge Machado
7
在我的情况下,user@host:/ 是我 C:\ 目录的根目录。因此,如果我写 user@host:/temp/,它等同于 C:\temp\。 我只能访问我的 C 驱动器,不能访问其他驱动器。 - imans77
2
@imans77,这可能有效,但如果您的驱动器号是e:,它就不会工作;-) 这就是我的情况,也是我发现这个问题的原因。 - Jason
1
使用最近的Windows Server 2022版本中的股票“scp”,我能够使用上面回答中的命令,但是在目标Windows机器上,使用冒号作为驱动器指定符的第一个路径段: scp some_file user@host:/C:/TEMP - jaguild

22
在Windows上,您可以使用WinSCP的图形界面进行scp操作。WinSCP是一个好用的自由软件,支持SFTP协议

非常好!我必须选择scp协议才能成功连接。 - zar
很好的东西。非常感谢你! - Александр Чернобай
非常棒。它救了我的命!哈哈 - Marlon Henrique Teixeira

10
我看到这篇文章已经很老了,但是在寻找答案时,我无法从广阔的互联网高速公路中找到解决方案。因此,我希望我能够贡献一些力量并帮助那些也在寻找答案的人。这个简单自然的问题似乎没有被记录在任何地方。
在运行OpenSSH(Windows版本7.7p1,LibreSSL 2.6.5)的Windows 10 Pro连接到另一个运行OpenSSH(Windows版本7.7p1,LibreSSL 2.6.5)的Windows 10 Pro上,我通过试错找到了一个解决方案。尽管令人惊讶地简单,但花费了一段时间。我发现所需的语法是:
举例说明而不是使用更加模糊和不完整的模板:
从远程系统安全地传输文件到您的本地系统:
scp user@remotehost:\D\mySrcCode\ProjectFooBar\somefile.cpp C:\myRepo\ProjectFooBar

或者反过来说:
scp C:\myRepo\ProjectFooBar\somefile.cpp user@remotehost:\D\mySrcCode\ProjectFooBar

我发现如果路径中含有空格,则引号应该从远程主机名后开始:
scp user@remotehost:"\D\My Long Folder Name\somefile.cpp" C:\myRepo\SimplerNamerBro

另外,针对你的特定情况,我 echo Cornel 的建议:

在 Windows 上,在传统的命令控制台中使用反斜杠。

祝好。 RocketCityElectromagnetics


1
你也可以尝试这个:

scp -r /cygdrive/c/desktop/myfolder/deployments/ user@host:/path/to/whereyouwant/thefile

3
只有当您安装了cygwin并在cygwin shell中运行或使用cygwin可执行文件时,此答案才适用。但对于某些人来说,这是一个有效的答案。 - Jason

-2

我发现在Windows上使用图形界面最容易(我推荐mobaXTerm,它具有ssh、scp、ftp、远程桌面等许多功能),但如果您坚持使用命令行,我建议先进入源文件夹所在的目录,然后执行以下命令:
scp -r yourFolder username@server:/path/to/dir
-r 表示递归用于目录。


1
下载了那个mobaXTerm,结果发现里面有病毒。给我造成了一些麻烦。 - Damien
@Damien,那你就不是从我提供的网站下载的。 - hehe3301

-2

驱动器字母可以在源中使用,例如:

scp /c/path/to/file.txt user@server:/dir1/file.txt

2
cp: cannot stat ‘/c/Users/xxx/Documents/rocket.chat/priv-key.ppk’: No such file or directory - The Onin
1
“/drives/c/Users/xxx/Documents/rocket.chat/priv-key.pp”将会起作用。 - David Poxon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接