使用SSH将文件从服务器复制到本地计算机

207

我在使用SSH从远程服务器复制文件时遇到了麻烦。我使用PuTTY通过SSH登录到服务器。一旦我找到要复制到我的计算机上的文件,我就使用以下命令:

scp username@host.com:/dir/of/file.txt \local\dir\

看起来操作成功了,但是实际上只是在远程目录/dir/of/下新建了一个名为'localdir'的文件夹。

我该如何通过SSH将文件复制到我的本地电脑上?


1
你的问题不够清晰:你是在本地计算机上运行 scp 还是通过 SSH 在远程 shell 中运行? - William Price
通过SSH进入远程shell,我相信。 - Vincent
1
我想把这个放进来,因为我不能把它作为答案...一个叫做FileZilla的程序允许你连接到你的ssh,并在你的服务器和本地设备之间交换文件。 - Lukali
你可以安装Git并输入以下命令: scp username@host:path_to_file path_in_the_local_machine 这将在远程机器上要求输入密码。 - EnthusiastiC
5个回答

379

这取决于您的本地操作系统。

如果您的本地操作系统类似于Unix,则尝试:

scp username@remoteHost:/remote/dir/file.txt /local/dir/
如果您的本地操作系统是Windows,则应使用pscp.exe实用程序。例如,下面的命令将从远程下载file.txt文件到本地计算机的D:磁盘中。
pscp.exe username@remoteHost:/remote/dir/file.txt d:\

看起来你的本地操作系统是Unix,所以尝试使用前者。


对于那些不知道什么是pscp.exe,也不知道它在哪里的人,你总可以去putty官网下载它。然后打开一个CMD提示符,进入您放置它的pscp.exe目录。然后按上面提供的命令执行即可。

编辑

如果您使用的是Windows 10以上版本的操作系统,则可以直接从其终端使用scp,就像Unix类操作系统一样。 感谢@gijswijs @jaunt @icanfathom


我的本地操作系统是Windows。我从putty网站下载了pscp.exe,但尝试打开它却没有反应。同时,我尝试了您上面列出的命令,结果提示:pscp.exe命令未找到。我还尝试了去掉.exe后缀执行该命令,但依然报错。 - Vincent
2
打开CMD提示符并进入您放置pscp.exe的目录。然后按上面提供的命令执行。 - mainframer
1
在Mac上使用scp命令时,必须提供"./"参数来表示文件需要下载到当前文件夹中。 - Sarang Manjrekar
2
通过Windows子系统Linux(WSL,基本上是在Windows上的Ubuntu),您现在也可以打开Bash,如果您的本地操作系统是Windows,只需使用scp即可。专业提示:您可以从WSL访问Windows文件系统。它位于/mnt/c下。因此,您可以执行以下操作:scp username@remoteHost:/remote/dir/file.txt /mnt/c - gijswijs
4
从2018年秋季更新开始,Windows 10现在已经预装了OpenSSH并将其添加到了PATH环境变量中。这意味着您也可以在Windows 10上使用scp命令。 - jaunt
显示剩余3条评论

41

您的问题有点令人困惑,但我假设您首先通过'ssh'找出了哪些文件或者特别是哪些目录存在,然后再在本地计算机上尝试将该目录中的所有文件复制到本地路径。您应该简单地执行scp -r

因此,在您的情况下,它会像这样:

local> scp -r username@host.com:/path/to/dir local/path 

如果您使用其他提供“类似scp功能”的可执行文件,请参阅其手册以递归复制文件。


25

您需要在两个目录路径中都命名文件。

scp username@host.com:/dir/of/file.txt \local\dir\file.txt

3
我不相信那是正确的。如果目标地址是一个目录,它将用与源文件相同的文件名将文件放在那里。 - William Price
@WilliamPrice 我认为这取决于本地操作系统。 - 0yeoj
1
@0yeoj 为了我的加强学习,那是什么本地操作系统?我双启动Fedora和Win8.1,并验证了只指定目标目录对于Linux版本的_scp_和Putty提供的_pscp_可执行文件都适用。 - William Price
@WilliamPrice,尝试查看mainframer的答案,您可能需要检查,并且您关于“如果目标目录是一个目录,则会将文件与源文件名相同放置在其中”是正确的。 - 0yeoj
@Andy,那行代码没有错误,只是它...... 解决不了问题。 - 0yeoj
显示剩余2条评论

9

请确保scp命令客户端服务器端都可用。

两边都要有,否则你的客户端会遇到这种(奇怪的)错误信息:scp: command not found或类似的信息,即使你已经在本地配置好了。


3

SCP命令必须在本地命令行中发出,对于Putty而言,该命令是pscp。

C:\something> pscp username@host.com:/dir/of/file.txt \local\dir\

我从PuTTY下载了pscp.exe并尝试打开它,但没有任何反应。然后我在putty.exe应用程序中尝试了该命令,但出现了错误:找不到pscp命令。 - Vincent
2
由于您似乎不知道它必须安装在您的路径中,因此您可能会发现FileZilla比SCP更容易使用。 - Jasen
Filezilla非常容易使用。我能够设置FileZilla并使用SSH凭据连接到树莓派。 - Bruce Seymour

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