3068

如何使用将文件夹从远程复制到本地主机scp

ssh用来登录我的服务器。
然后,我想将远程文件夹复制foo到本地/home/user/Desktop

我如何实现这一目标?

4

12 回答 12

5603
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

通过不包括 foo 末尾的尾随“/”,您将复制目录本身(包括内容),而不仅仅是目录的内容。

man scp(见在线手册

-r 递归复制整个目录

于 2012-07-03T05:21:39.313 回答
340

要使用scp的全部功能,您需要执行以下步骤:

  1. 公钥授权
  2. 创建 ssh 别名

然后,例如,如果你有这个~/.ssh/config

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

您将避免输入密码并简化scp语法,如下所示:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

此外,您将能够使用远程路径完成:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

更新:

<source>要启用远程 bash-completion,您需要在主机和主机上都有 bash-shell <target>,并且 bash-completion 正常工作。有关更多信息,请参阅相关问题:

使用 scp 时如何为远程路径启用自动完成功能?
SCP 文件名选项卡完成

于 2013-12-04T06:21:57.313 回答
293

将所有内容从本地位置复制到远程位置(上传)

scp -r /path/from/local username@hostname:/path/to/remote

将所有内容从远程位置复制到本地位置(下载)

scp -r username@hostname:/path/from/remote /path/to/local

xxxx自定义端口自定义端口号在哪里

 scp -r -P xxxx username@hostname:/path/from/remote /path/to/local

将当前目录从远程复制到本地

scp -r username@hostname:/path/from/remote .

帮助:

  1. -r递归复制所有目录和文件
  2. 始终使用完整位置/,获取完整位置pwd
  3. scp将替换所有现有文件
  4. hostname将是主机名或 IP 地址
  5. 如果需要自定义端口(除了端口 22),请使用-P portnumber
  6. . (点) - 它表示当前工作目录,因此从服务器下载/复制并仅粘贴到此处。

注意:有时自定义端口会因为防火墙不允许端口而无法使用,因此请确保防火墙允许自定义端口进行传入和传出连接

于 2016-05-23T09:38:25.317 回答
54

我经常使用的是:

scp -r username@IP:/path/to/server/source/folder/  .

. (点):意思是current folder。所以从服务器复制并粘贴在这里。

IP:可以是 IP 地址125.55.41.311,也可以是主机ns1.mysite.com

于 2014-06-10T07:41:13.277 回答
41

最好先在远程服务器上压缩目录:

tar czfP backup.tar.gz /path/to/catalog

其次,从远程下载:

scp user@your.server.example.com:/path/to/backup.tar.gz .

最后,解压文件:

tar -xzvf backup.tar.gz
于 2014-05-29T11:12:01.563 回答
25

典型场景,

scp -r -P port username@ip:/path-to-folder  .

用样本解释,

scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .

在哪里,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
于 2015-07-06T07:21:08.510 回答
23

而且,如果您要从远程位置下载大量文件,并且不太关心安全性,请尝试将 scp 默认加密(Triple-DES)更改为“blowfish”之类的东西。

这将大大减少文件复制时间。

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
于 2014-06-17T06:02:32.773 回答
21

转到统一工具栏上的文件

在此处输入图像描述

按 Ctrl + l 并写 here_goes_your_user_name@192.168.10.123

192.168.1.103 是您要连接的主机。

这里的一个例子

在此处输入图像描述

于 2015-11-09T21:05:10.683 回答
17

如果您遇到"Too many authentication failures",请指定您添加到服务器 ssh 服务器的确切 SSH 密钥:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
于 2016-09-26T21:54:58.757 回答
15

问题是如何使用scp命令将文件夹从远程复制到本地。

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

但这是更好的方法sftp- SSH 文件传输协议(也称为安全文件传输协议,或 SFTP)是一种网络协议,可通过任何可靠的数据流提供文件访问、文件传输和文件管理。(维基百科)。

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

有关sftp命令的帮助,只需键入help?

于 2016-08-15T05:47:35.620 回答
5

我不知道为什么,但我不得不在 source server directive 之前使用本地文件夹。让它发挥作用

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
于 2016-04-29T19:44:11.347 回答
0

对于 Windows 操作系统,我们使用此命令。

pscp -r -P 22 hostname@IP:/path/to/Downloads   ./
于 2021-08-18T18:48:43.050 回答