2011-08-22 04:12:04 +0000 2011-08-22 04:12:04 +0000
81
81

在两台Linux电脑之间通过局域网传输文件的最佳方法。

我想在两台Linux电脑之间传输文件(一个音乐文件夹)。在寻找最好的方法后,我看到有很多方法可以做到这一点。我知道这个问题已经被问了很多到处都有,_一直都有。主要的问题是,在2011年,对于Linux初学者来说,并没有一个明确的、最近的共识来完成这个任务(甚至取决于一些参数)。

因此,本着Stack Exchange网站的精神,我希望这不是与我的特殊情况有关,而是为其他人提供如何在两台Linux电脑之间通过本地网络传输文件的指南。我想一个维基会对很多人有用。

这是我目前发现的情况。

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • giver

最简单的是什么?最灵活的?最简单的?最好的解决方案?每种方案的优缺点是什么?是否有其他(更好)的选择?选择最佳方法的参数是什么(解决方案可能取决于文件数量、文件大小、易用性与灵活性,…)?

答案 (6)

66
66
66
2011-08-22 04:35:30 +0000

在Linux环境下,无论是安全性还是易用性,ssh都是最好的方式。SSH、SSHFS、SCP和你所列出的SFTP都只是建立在SSH协议之上的不同服务。SCP使用起来非常简单,它的工作原理和CP一样,但是你可以在路径中提供用户和机器名。所以,我们可能会做一个像cp ~/music/ ~/newmusic/这样的CP,但我们也可以很容易地做scp ~/music/ user@host:~/newmusic来发送给名为host的计算机。就是这样–我们不需要设置任何东西。如果你没有设置证书或其他认证,你会被提示在另一台机器上输入账户密码(当然,scp与ssh共享这些设置)。

SFTP是一个可以在远程文件系统上轻松完成很多操作的工具–它的工作原理和FTP一样,但它是通过SSH运行的,所以很安全,只需要一个SSH服务器。man sftp会告诉你如何使用它。我使用SFTP并不只是为了在两台机器之间移动文件夹,当你有很多操作要做的时候,比如你要在另一台电脑上重新整理文件,它就比较有用。

SSHFS只是将SFTP扩展到文件系统中:它允许你将虚拟主机挂载到你的文件系统中,所以网络方面的事情是完全透明的。SSHFS是用于半永久性的设置,而不仅仅是一次性的文件传输。它需要更多的努力去设置,你可以在项目网站.

如果你需要在混合OS环境下工作,Samba就成为你的下一个最佳选择。Windows和OS X完全自动支持Samba,Linux也是如此,尽管它有时使用起来很粗糙。

19
19
19
2011-08-22 06:49:45 +0000

对于一次性移动,建议使用scp。

但是如果你发现这个目录可能有用,而且你需要多次移动它以保持其他位置的更新,那么你可以使用rsync (用ssh)。

由于rsync有很多参数,我通常会把它放在一个小shell里,这样我就能正确地使用它(每次)。我们的想法是只发送自上次运行后有变化的东西。

#!/bin/bash

user="nisse"
host="192.168.0.33"

echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/

这将把一个名为"/home/media/music/“的目录从本地电脑移到名为192.168.0.33的电脑上,使用用户 "nisse"。并删除目标电脑上不存在的任何东西。

10
10
10
2014-04-27 06:30:49 +0000

我建议你尝试其他的方法,而不是直接用SSH在你自己的局域网内移动文件,因为开销是很微小的。如果这个方案对你无效,我会选择 Caspar 的解决方案。

在源头:

$ python3 -m http.server {PICK_YOUR_PORT}

在目的地:

$ wget -r {ip / hostname}:{port}/{File / Directory}

这不仅比使用SSH更轻,而且速度更快,在标准CAT6 UTP上的速度为45~65MiB.
如果你真的想充分利用连接,可以尝试用wget代替lftp,并使用pget -n20mirror -r命令。

8
8
8
2011-08-22 08:57:03 +0000

最快的可能是netcat(如caspar所述)。

我喜欢tar&ssh的组合,这样既安全又快:

在源码上

tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )

以root的身份这样做,可以保留文件权限。或者两边都用-p。另外如果你的文件比较稀疏的话,可以考虑使用-S

如果你使用ssh作为与openSSH一起工作的密码,可以减少arcfour的加密开销:

tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )

要更新远程路径,rsync是完美的:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
```。
5
5
5
2011-08-22 10:00:32 +0000

如果绝对要在局域网内进行,我会使用rsync,因为如果被打断,它会从原来的地方继续传输。它还有其他一些技巧,可以最大限度地减少传输的数据量,尽管我怀疑其中的许多/任何一个都与将音乐库复制到处女位置的情况有关。如果担心安全问题,只要先设置RSYNC_RSH=ssh,数据就会通过ssh进行隧道传输。

如果我真的这么做,我可能根本不会使用局域网。我会把文件复制到USB硬盘上,然后再从USB硬盘上删除。根据我的经验,这可以很容易地多个数量级的速度比通过局域网,尽管必须复制文件两次 - USB 2.0的额定速度为480Mbps,这是比任何短的千兆以太网更快,再加上它不太敏感的条件,这将降低性能的LAN。它也完全不受操作系统的影响,只要你使用的文件系统是所有相关机器都能处理的–我推荐使用VFAT/FAT32,因为它几乎是通用的。

0
0
0
2016-04-14 20:18:21 +0000

我先按照ssh流程进行无密码登录 http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

对于脚本和文本文件,我使用以下方法就可以了

将数据从本地主机传输到远程主机.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

将数据从远程主机传输到本地主机.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

这对我在没有ssh客户端或scp内置的嵌入式系统上传输文件很有效。

没有scp - 只有ssh。