在Linux服务器之间快速传输文件的最简单方法?


16

我需要将文件从一台CentOS服务器传输到另一台。大约每10分钟传输5MB文件。不需要加密。

快速传输文件有何难处?

有没有比ftp更简单的东西?

谢谢!


1
我有信心,在焦油netcat的将胜利...嘿嘿...:serverfault.com/questions/18125/...
埃文安德森

由于我不需要加密但需要速度,因此我更喜欢rsync。
Alex L

我刚刚了解到HTTP传输没有太多开销,所以也许我可以使用它。
Alex L

不要在您的问题中编辑答案,而应将其发布为答案。回滚。
HopelessN00b 2012年

有关“快速”的信息,另请参见unix.stackexchange.com/questions/48399/…–
rogerdpack

Answers:


25

同步

在使用ftp或tftp之前,我会先使用rsync。

根据我的经验,更多的选择和更可靠的转移。


1
我还发现rsync通常比其他任何东西(scp,
cif

那么http传输呢?
Alex L

@Ophidian您的意思是将rsync用作守护程序吗?否则,它怎么会比scp更快呢,因为两者都使用ssh并且具有加密功能。
balki 2011年

@balki是的,rsync守护程序。它并不是特别健谈,可以很好地将磁盘上的数据馈送到线路上,并且可以完成请求的工作量很小(例如,对文本文件应用差异)。
Ophidian 2011年

21

ssh上的tar可以,但是通过netcat的TCP上的tar的开销尽可能小!如果这是一次性的事情,请试一下:

在接收器上:

nc -l -p 8989 | tar x

在发件人上:

tar cf - /source-path | nc (receiving host ip address) 8989

如果这是您要定期执行的操作,则可能会使用rsync。


瑞士军刀netcat +1
chmeee

同样,因为您不阅读Evan。哈哈哈!它实际上不是一回事。他说,他将大约每10分钟传输5MB文件。也许通过摩尔斯电码发送是一个很好的选择?;-)(注意:Evan和我之间的私人玩笑)
KPWINC

8

有两个人在ssh上提到了tar,但没有说怎么做。作为记录,基本过程是运行:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

或者,如果您要从接收端开始传输:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

与Evan的netcat解决方案相比,这种方式的优势在于,整个过程可以从一台计算机启动。您不必协调两个netcat调用。如果需要此命令自动运行,则可以设置一个ssh密钥,使您无需密码即可建立连接,并将该密钥用于这些连接。

ssh具有-C选项来压缩其数据流,或者您可以使用GNU tar的内置压缩功能:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

Rsync是另一个选择,但是它的强项是更新接收端已经存在的文件。当使用它传输另一端不存在的文件时,我发现它比scp或tar / ssh慢。


1
+1什么,您的意思是不是每个人都凭直觉知道如何在ssh上做tar?奇怪的。:)
混乱

tar本身并不可靠-没有完整性检查,但是使用SSH(TLS),您可以得到完整性,这是因为TLS能够检测飞行中的数据更改。Rsync是更好的选择,因为Rsync可以在不加密的情况下进行更好的完整性检查;OP声明不需要加密。
基洛

tar需要什么完整性检查?TCP和ssh层提供可靠的数据传输。如果您断言tar本身可能存在错误,则必须以相同的方式对待rsync。实际上,由于协议问题,我的rsync传输已冻结。我不记得曾经做过tar / unar管道。
Kenster,2009年

6

我会使用scptar过度ssh,真的。加密确实会使速度变慢,但是设置和使用的简易性,可靠性以及(当然,主观地)熟悉程度使我愿意接受这个打击,除非我真的需要这种速度。

您还可以通过告诉它使用比默认密码更快的密码来加快ssh传输的速度。默认值通常是,3des并且您通常可以这样做-c des,因此,显然,它会更快,并且-c blowfish也表现得很快,尽管我没有进行严格的测试。

(在SSHv1时代,您通常可以这样做-c none,但是我想有人认为这是不好的做法。)


4

如果您必须通过scp / ssh,我的实验表明,这些天默认启用的最快密码是RC4。您可以在ssh / scp命令中通过' -c arcfour ' 指定密码:

初始副本:

  • scp -c arcfour -r foo/ desthost:/destdir

更新:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir

3

Rsync是一个不错的方法,因为如果发现自己多次传输相同的文件,它将加快复制速度,如手册页中的引号所示。

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.

2

FTP非常简单,但是更简单的方法可能是在一台计算机上创建NFS共享,然后将其安装在另一台计算机上。然后,复制文件包括将cp从一个目录复制到另一个目录。


根据要求。例如,我不会在Internet上使用NFS。
凯尔·霍奇森

1
好点子。在那种情况下,我建议使用rsync,因为它可以在中断的情况下恢复到原来的状态。也因为它仅在源和目标之间传输增量。
Swoogan

这个问题很笼统,我喜欢Swoogan发表的解决方案,尤其是那位作者提到需要最简单的解决方案且不需要加密的问题
integratorIT

2

如果您想提高速度,可以使用netcat和tar。在不考虑加密的本地网络上,它将比ssh,rsync或scp更快。谷歌“ netcat tar”。

目标服务器

nc -l -p 7878 | tar -C /target/dir -xzf -

源服务器

tar -cz /source/dir | nc DestinationServer 7878

显然,这需要实际安装netcat。谷歌“ netcat的焦油”的更多信息。


1

我相信您已经解决了问题,但是如果您的ssh在其他端口(而不是标准端口22)上工作,则可以使用此端口

rsync -avz --rsh ='ssh -pXXXXX'/ local / dir / root@192.168.1.2:/远程/目录

注意:-用您的端口号替换XXXXX-用正确的远程服务器IP替换192.16.1.2


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.