【问题标题】:Copying a local file from Windows to a remote server using scp [closed]使用 scp 将本地文件从 Windows 复制到远程服务器 [关闭]
【发布时间】:2012-02-17 01:09:38
【问题描述】:

所以,我试图通过 ssh 和 scp 将文件文件夹从本地计算机传输到服务器。 sudoing 后,我使用如下命令:

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

我得到错误:

ssh: C: 名称或服务未知

我猜这是c:/desktop 等的语法。有什么想法吗?

顺便说一句,我正在使用 putty + Windows 7。

【问题讨论】:

  • windows/dos 上的标准路径说要使用\反斜杠,所以试试 C:\desktop\myfolder\deployments\
  • 所有非 GUI 解决方案都不适合我。我收到错误,fork:没有这样的文件或目录。我可以ssh 目的地,我可以dir 到源。

标签: windows ssh copy sudo scp


【解决方案1】:

如果你的盘符是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 ---我添加了这段代码这是在我的服务器中创建一个测试文件夹 no 在我的本地计算机 scp - r root@31.222.168.64:/var/www/vhosts/mywork D:\test ---给出错误“ssh:无法解析主机名 D:名称或服务未知丢失连接”
  • @pTi 您在使用哪个scp?如果您使用的是 Cygwin 的scp,则可以使用路径为/cygdrive/d/test。要省略使用/cygdrive,您可以运行mount --change-cygdrive-prefix /,这样路径将改为/d/test
  • 不确定它是特定于隧道还是特定于 Windows 10 中的 scp 版本,但我不得不使用语法(经过大量试验和错误): scp -P -r 。 /localdir user@host:"D:\remotedir"
【解决方案2】:

驱动器号可以在目标中使用

scp some_file user@host:/c/temp

其中c 是驱动器号。它被视为一个目录。

也许这也适用于源代码。

【讨论】:

  • 感谢这个 simpleworking 答案,而不是试图让我使用其他软件或其他任何东西!我在网上搜索才发现,没有人直接回答这个问题......
  • 这无法获取文件
  • 就我而言,user@host:/ 是我的C:\ 目录的根目录。所以如果我写user@host:/temp/,就相当于C:\temp\ 。我只能访问我的 C 驱动器,而不能访问其他驱动器。
  • @imans77,这可能有效,但如果您的驱动器号是 e:,则不会 ;-) 我就是这种情况以及我是如何发现这一点的。
【解决方案3】:

在 Windows 上,您可以使用winSCP 使用 scp 的图形界面。一个不错的免费软件,实现了SFTP protocol

【讨论】:

  • 效果很好!我必须选择 scp 协议才能成功连接。
  • 好东西。非常感谢)
  • 非常棒。它救了我的命!大声笑
【解决方案4】:

我看到这篇文章很老了,但是在我寻找这个问题的答案时,我无法从广阔的互联网高速公路上找到解决方案。因此,我希望我能为某人做出贡献和帮助,因为他们也发现自己在寻找答案时遇到困难。这个简单、自然的问题似乎在任何地方都没有记录。

在连接到 Windows 10 Pro 的 Windows 10 Pro 上,都运行 OpenSSH(Windows 版本 7.7p1,LibreSSL 2.6.5),我通过反复试验找到了解决方案。虽然出乎意料的简单,但还是花了一些时间。我发现所需的语法是

通过示例而不是更多晦涩和不完整的模板:

从远程系统安全地传输到本地系统:

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

另外,对于你的特殊情况,我附和 Cornel 所说的话:

在 Windows 上,至少在常规命令控制台中使用反斜杠。

亲切的问候。 火箭城电磁学

【讨论】:

    【解决方案5】:

    你也可以试试这个:

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

    【讨论】:

    • 只有在安装了 cygwin 并且在 cygwin shell 中运行或使用 cygwin 可执行文件时,此答案才有效。但这是一个适用于某些人的有效答案。
    【解决方案6】:

    我发现在 Windows 上使用图形界面是最简单的(我推荐 mobaXTerm 它有 ssh、scp、ftp、远程桌面等等)但是如果你是在命令行上设置的,我会推荐 cd'ing进入包含源文件夹的目录,然后
    scp -r yourFolder username@server:/path/to/dir
    -r 表示要在目录上使用递归

    【讨论】:

    • 下载了那个 mobaXTerm,结果发现它有病毒。搞砸了一些对我有好处的东西
    • @Damien 那么你没有从我提供的网站下载它
    【解决方案7】:

    驱动器号可以在源中使用

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

    【讨论】:

    • cp: cannot stat ‘/c/Users/xxx/Documents/rocket.chat/priv-key.ppk’: No such file or directory
    • '/drives/c/Users/xxx/Documents/rocket.chat/priv-key.pp" 将起作用