shell从服务器复制文件夹,关于shell:如何使用scp将文件夹从远程复制到本地?…

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

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

如何做到这一点?

操作的问题是,当ssh连接到远程主机时,是否可以将文件从远程主机复制到本地主机。我不知道为什么没有一个答案能正确回答他/她的问题。

请参阅meta.stackoverflow.com/questions/294217/…。问题还在这里,你也可以投票。它只是不允许有更多的答案。

这个问题的前提是不正确的。其思想是,一旦登录到ssh,如何将文件从登录的机器移回登录的客户机。但是,SCP不知道也不能使用ssh连接。它正在建立自己的联系。因此,简单的解决方案是在本地工作站上创建一个新的终端窗口,并运行SCP,将文件从远程服务器传输到本地计算机。例如,scp-i key user@remote:/remote dir/remote file/local dir/local file

这个问题可能是个话题外的话题,但它也是谷歌排名最高的帖子。锁定意味着没有人可以更新它来提供更好的解决方案。

使用mc:TAB、cd sh://USER@HOST,使用mc快捷键,完成后cd退出。

我最近问了一个类似的"稍微深入"的问题,关于另一个超级用户工具的命令行,它被那里的mods移动到stackoverflow。不管怎样,我同意mods的观点:我们能把它转移到超级用户,请把它解锁,并有更多的答案进来吗?

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

来自man scp(见在线手册)

-r Recursively copy entire directories

我每次都用谷歌搜索这个。相关漫画:xkcd.com/1168

@gryphius使用时,我继续收到一个拒绝权限(publickey)错误。我如何解决这个问题?

@John-K,许多可能的原因(服务器上未启用SCP、公钥未授权、文件权限问题…)。首先检查标准ssh是否与您的密钥一起工作。请参考SOF/ServerFault上关于该主题的现有问题,如果没有帮助,请使用ssh/scp的调试输出在ServerFault上询问新问题。

您必须在两台计算机上都设置RSA密钥-您可能还必须在本地计算机上运行ssh-add。

我发现了两个很好的消息:-C标志增加了压缩,-C标志允许您传入其他密码类型以获得更好的性能,如dimuthu答案中所示的scp -c blowfish a@b:something .。

scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/foo始终复制和替换

使用-p保存文件修改时间、权限等!scp-pr用户@…

这个答案缺乏重要的解释。你最终会和Desktop/foo一起结束还是会让Desktop/allcontentsofFooGohereSCP看起来很奇怪,有时对我来说,它会做一件接着一件的事情

例如(通常用于shell脚本):su myuser -c"scp -r /var/www/myapp.org/uploads root@$jcrdevip:/var/www/mydevapp.com/uploads"将内容从上载复制到上载。scp -r /var/www/myapp.org/uploads root@$jcrdevip:/var/www/mydevapp.com/uploads似乎将文件夹上载复制到mydevapp.com/uploads文件夹中,从而创建不需要的子文件夹。

@Toskan和scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/你应该以Desktop/foo结束。在scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/中,你将得到Desktop中foo的内容,以及Desktop中散布的foo的所有子目录。

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

公钥授权

创建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)

更新:

要启用远程bash完成,您需要在和主机上都有bash shell,并正确地工作bash完成。有关更多信息,请参阅相关问题:

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

不知道配置文件,这太棒了!

标签完成是胡说,只是完成从本地主机为我。

@B.long问题是"如何将远程文件夹foo复制到本地桌面"。我的答案是"scp-r prod:/path/foo/home/user/desktop"。希望你能看到关系。

@Bernhard远程选项卡完成是一个众所周知的过程。这对你来说是胡说八道:)

@可能是Alexanderyancharuk,但您的答案对我来说并不是这样,所以您的答案至少限于本地和/或主机上的某些版本。

@Bernhard对我来说很明显,因为我使用的是bash shell。谢谢你指点我!回答更新。

我的错误是@alexanderyancharuk,我以为你是在暗示OP(@slasengger)需要修改他的~/.ssh/config才能复制文件夹(这是不正确的)。现在我明白了,你正试图用无密码的ssh给他额外的便利。

@Alexander Yancharuk:感谢您的回答,这比只介绍语法更详细。

您还可以使用类似storm的工具来自动化向.ssh/config添加服务器的过程。

真的。。远程路径完成的关键点。我不知道。

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

scp -r /path/from/destination username@hostname:/path/to/destination

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

scp -r username@hostname:/path/from/destination /path/to/destination

自定义端口,其中xxxx是自定义端口号

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

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

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

帮助:

-r递归复制所有目录和文件

始终使用来自/的完整位置,由pwd获取完整位置。

scp将替换所有现有文件

hostname将是主机名或IP地址。

如果需要自定义端口(除了端口22),使用-P portnumber。

. (dot)-它是指当前的工作目录,所以只能从服务器下载/复制并粘贴到这里。

注意:有时由于防火墙中不允许使用该端口,自定义端口将无法工作,因此请确保防火墙中允许使用自定义端口进行传入和传出连接。

看起来(至少在RaspbianJessie和Ubuntu的最新版本中)scp使用-p(大写p)作为端口,而(奇怪的是)ssh使用-p(小写)。

@阿丹普勒,你是对的,但大致上我总是用-p(小):)

-p用于保存"修改时间、访问时间和原始文件中的模式"。因此,如果您将它用于端口,那么它可能不起作用;-),除非您有一个不同的版本,以不同的方式使用小写字母P。

对于ssh,是的。不适用于SCP(我想)。

如果目录包含空格,我应该放什么?

@hyprcrcb使用pwd获取位置并使用相同的位置

_port_可能指当地?如果两个端口都不同怎么办?

@Timo没关系,因为您将在ssh登录后执行scp。

@但是如果我远程到本地,我就不会登录。

我经常使用的是:

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

. (dot):表示current folder。所以从服务器复制并粘贴到这里。

IP:可以是像125.55.41.311这样的IP地址,也可以是像ns1.mysite.com那样的主机。

感谢您指出.是指当前目录!

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

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

其次,从远程下载:

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

最后,提取文件:

tar -xzvf backup.tar.gz

"更好"在很大程度上取决于您传输的数据以及ssh到服务器进行压缩/解压的工作。并且:您可以使用-C标志向scp添加压缩,比如scp -C a@b:bigfile .。

这让我想起了@cptloop的评论!:d xkcd.com/1168

如果您有一个地狱般的文件要从远程位置下载,如果您不太关心安全性,请尝试将SCP默认加密(三重DES)更改为类似"Blowfish"。

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

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

根据这篇博客文章,你可以用arcfour代替blowfish,获得更好的性能,但是它有安全缺陷。

转到Unity工具栏上的文件

2b065cf727286fbe1a12d8ba30acbad1.png

按ctrl+l在这里写下"你的用户"name@192.168.10.123

192.168.1.103是要连接的主机。

这里有一个例子

f74954e4db49995d8ab453b05d7445fe.png

这个答案帮助了我。谢谢您。。。

典型场景,

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

如果遇到"太多身份验证失败",请指定已添加到服务器ssh服务器的确切ssh密钥:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir

问题是如何使用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或?。

我不知道为什么,但我必须在源服务器指令之前使用本地文件夹。使它工作

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org

假设用户有权限,您可以在不使用root@的情况下执行绝对路径吗?

THE END
< <上一篇
下一篇>>