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

Melhor forma de transferir ficheiros através de uma LAN entre dois computadores Linux

Quero transferir ficheiros (uma pasta de música) entre dois computadores Linux. Depois de procurar a melhor forma de o fazer, vi que existem lotes de formas de o fazer. Sei que isto tem sido pedido a lot, everywhere e all the time. O principal problema com isto é que não existe um consenso recente e claro sobre uma melhor maneira de fazer esta tarefa em 2011 para os iniciantes do Linux (mesmo dependendo de alguns parâmetros).

Assim, no espírito dos sites Stack Exchange, quero que isto não esteja relacionado com a minha situação particular, mas mais como um guia para outros também sobre como transferir ficheiros entre dois computadores Linux através de uma rede local. Penso que um wiki seria útil para muitos.

Aqui está o que encontrei até agora:

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

  • giver

O que é o mais fácil? A mais flexível? Mais simples? A melhor solução? Quais são os prós e os contras de cada um? Existem outras (melhores) opções? Quais são os parâmetros na escolha do melhor método (solução pode depender do número de ficheiros, tamanho dos ficheiros, facilidade vs. flexibilidade, …)?

Respostas (7)

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

Num ambiente Linux, tanto para segurança como para facilidade de utilização, o ssh é o melhor caminho a seguir. SSH, SSHFS, SCP, e SFTP, tal como se lista, são todos apenas serviços diferentes construídos em cima do protocolo SSH. O SCP é muito fácil de usar, funciona tal como o CP mas pode fornecer nomes de utilizadores e máquinas no caminho. Assim, podemos fazer um CP como cp ~/music/ ~/newmusic/, mas também podemos fazer scp ~/music/ user@host:~/newmusic com a mesma facilidade para o enviar para o computador chamado host. É isso - não precisamos de configurar nada. Ser-lhe-á pedida a password da conta na outra máquina se não tiver certificado ou alguma outra autenticação configurada (o scp partilha essas configurações com o ssh, claro).

SFTP é uma ferramenta que facilita muitas operações num sistema de arquivo remoto - funciona tal como o FTP, mas corre através do SSH, pelo que é seguro e requer apenas um servidor SSH. man sftp dir-lhe-á tudo sobre como o utilizar. Não uso o SFTP apenas para mover uma pasta entre duas máquinas, é mais útil quando se tem muitas operações a fazer, como se estivermos a reorganizar ficheiros noutro computador.

SSHFS apenas estende o SFTP para um sistema de ficheiros: permite-lhe montar um anfitrião virtual no seu sistema de ficheiros, para que as coisas de rede aconteçam de forma totalmente transparente. O SSHFS é para configurações semi-permanentes, e não apenas para uma transferência de ficheiro única vez. É preciso mais algum esforço para ser configurado, que pode ler sobre o website do projecto .

Se precisar de trabalhar num ambiente misto de SO, o Samba torna-se a sua próxima melhor aposta. Windows e OS X suportam o Samba completamente automaticamente, e o Linux também o faz, embora por vezes seja difícil de usar.

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

Por uma vez, recomenda-se o scp.

Mas se achar que esta poça funcionar e precisar de a mover muitas vezes para manter a outra posição actualizada então pode usar rsync (com ssh).

Uma vez que o rsync tem muitos argumentos, normalmente coloco-o numa pequena concha para que o consiga acertar (todas as vezes). A ideia é apenas enviar coisas que tenham mudado desde a última vez que correu.

#!/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/

Isto irá mover um dir chamado “/home/media/music/” do computador local para o pc chamado 192.168.0.33, usando o utilizador “nisse”. E apagar qualquer coisa no alvo que não exista no pc local.

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

Eu recomendaria que tentasse alternativas em vez de ir directamente com o SSH para mover ficheiros dentro da sua própria LAN, uma vez que a sobrecarga é IMMENSE. Eu iria com a solução da Caspar se esta, por qualquer razão, não funcionar para si:

Na fonte:

$ python3 -m http.server {PICK_YOUR_PORT}

No destino:

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

Isto não será apenas mais leve do que usar SSH mas muito mais rápido com velocidades que variam entre 45~65MiB no CAT6 UTP padrão.
Se quiser realmente espremer ao máximo a ligação tente substituir wget por lftp e usando comandos pget -n20 e mirror -r.

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

O mais rápido é provavelmente netcat (como caspar descrito).

Eu gosto da combinação de tar & ssh, que é segura e ainda rápida:

Na fonte

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

Fazendo isso como raiz, preserva as permissões dos ficheiros. Ou utilizar -p em ambos os lados. Também -S pode ser considerado se tiver ficheiros esparsos.

É possível reduzir a sobrecarga de encriptação de ssh se usar arcfour como cifra que funciona com openSSH:

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

Para actualizar o caminho remoto, rsync é perfeito:

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

Se tiver absolutamente de ser feito através da LAN, eu usaria rsync, uma vez que se for interrompido, ele pegará de onde parou. Tem também alguns outros truques para minimizar a quantidade de dados que é transferida, embora duvide que muitos/alguns deles sejam relevantes para o caso de copiar uma biblioteca de música para um local virgem. Se a segurança é uma preocupação, basta definir RSYNC_RSH=ssh primeiro e os dados serão sintonizados sobre ssh.

Se o estivesse a fazer, porém, provavelmente não utilizaria de todo a LAN. Copiaria os ficheiros para um disco rígido USB, e depois para fora dele. Na minha experiência, isto pode facilmente ser várias ordens de magnitude mais rápido do que passar sobre a LAN, apesar de ter de copiar os ficheiros duas vezes - USB 2.0 é classificado para 480Mbps, o que é mais rápido do que qualquer coisa com uma ethernet gigabit, além de ser menos sensível a condições que irão degradar o desempenho de uma LAN. Também é completamente independente do SO, desde que se utilize um sistema de ficheiros que todas as máquinas envolvidas possam tratar - eu recomendaria VFAT/FAT32, uma vez que isso é praticamente universal.

2
2
2
2011-08-22 09:03:18 +0000
0
0
0
2016-04-14 20:18:21 +0000

Segui primeiro o processo ssh para login sem palavra-passe http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Para scripts e ficheiros de texto o seguinte funciona para mim muito bem

Para transferir dados do anfitrião local para o anfitrião remoto.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Para transferir dados do anfitrião remoto para o anfitrião local.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Isto funciona para mim para transferir ficheiros em sistemas incorporados que não tenham cliente ssh ou scp incorporados.

Sem scp - apenas ssh.