Melhor maneira de transferir arquivos em uma LAN entre dois computadores Linux

70

Eu quero transferir arquivos (uma pasta de músicas) entre dois computadores Linux. Depois de procurar a melhor maneira de fazer isso, vi que existem lotes de maneiras de fazer isso. Eu sei que isso foi perguntado muito , em todos os lugares e o tempo todo . O principal problema com isso é que não existe um consenso claro e recente sobre a melhor maneira de realizar essa tarefa em 2011 para iniciantes em Linux (mesmo dependendo de alguns parâmetros).

Assim, no espírito dos sites do Stack Exchange, quero que isso não esteja relacionado à minha situação específica, mas sim mais um guia para os outros, sobre como transferir arquivos entre dois computadores Linux em uma rede local. Eu acho que um wiki seria útil para muitos.

Aqui está o que eu encontrei até agora:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • doador

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

    
por jonallard 22.08.2011 / 06:12

9 respostas

59

Em um ambiente Linux, para segurança e facilidade de uso, o ssh é o melhor caminho a percorrer. SSH, SSHFS, SCP e SFTP, conforme listado, são todos serviços diferentes criados no topo do protocolo SSH. O SCP é muito fácil de usar, funciona como o CP, mas você pode fornecer nomes de usuário e de máquina no caminho. Então, poderíamos fazer um CP como cp ~/music/ ~/newmusic/ , mas poderíamos fazer facilmente scp ~/music/ user@host:~/newmusic para enviá-lo para o computador chamado host. É isso - não precisamos definir nada. Você será solicitado a informar a senha da conta na outra máquina se não tiver certificado ou alguma outra configuração de autenticação (o scp compartilha essas configurações com o ssh, é claro).

O SFTP é uma ferramenta que facilita a realização de muitas operações em um sistema de arquivos remoto - funciona como o FTP, mas é executado por meio do SSH, portanto, é seguro e requer apenas um servidor SSH. man sftp dirá tudo sobre como usá-lo. Eu não uso o SFTP apenas para mover uma pasta entre duas máquinas, é mais útil quando você tem muitas operações para fazer, como se estivesse reorganizando arquivos em outro computador.

O SSHFS apenas estende o SFTP para um sistema de arquivos: ele permite que você monte um host virtual em seu sistema de arquivos, de modo que o material da rede aconteça de forma totalmente transparente. O SSHFS é para configurações semi-permanentes, não apenas uma transferência de arquivos única. É preciso mais esforço para configurar, sobre o qual você pode ler no site do projeto .

Se você precisa trabalhar em um ambiente de sistema operacional misto, o Samba se torna sua próxima melhor aposta. O Windows e o OS X suportam o Samba de forma totalmente automática, e o Linux também, embora às vezes seja difícil de usar.

    
por 22.08.2011 / 06:35
55

Meu favorito pessoal para os casos em que a segurança não importa é netcat + tar :

Para enviar um diretório, cd para dentro do diretório cujo conteúdo você deseja enviar no computador fazendo o envio e fazendo:

tar -cz . | nc -q 10 -l -p 45454

No computador que está recebendo o conteúdo, vá para onde deseja que o conteúdo apareça e faça:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

Substitua $REMOTE_HOST por ip / hostname do computador que está fazendo o envio. Você também pode usar uma porta diferente em vez de 45454 .

O que está acontecendo aqui é que o computador 'receptor' está se conectando ao computador de envio na porta 45454 e recebendo o conteúdo tar'd e gzip'd do diretório, e está passando isso diretamente para tar (e gzip) para extraí-lo no diretório atual.

Exemplo rápido (usando o host local como host remoto)

Computador 1

caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

Computador 2

caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt  file_b.log
    
por 22.08.2011 / 06:53
19

Para movimentos de uma vez, scp é recomendado.

Mas se você achar que este diretório pode funcionar e você precisa movê-lo várias vezes para manter a outra posição atualizada, então você pode usar o rsync (com ssh).

Como o rsync tem muitos argumentos, eu costumo colocá-lo em uma pequena shell para que eu acerte (sempre). A ideia é enviar apenas coisas que foram alteradas desde a última vez que foram executadas.

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

Isso moverá um diretório chamado "/ home / media / music /" do computador local para o pc chamado 192.168.0.33, usando o usuário "nisse". E apague tudo o que não existe no PC local.

    
por 22.08.2011 / 08:49
7

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

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

Na fonte

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

Fazendo isso como root, ele preserva as permissões de arquivo. Ou use -p em ambos os lados. Também -S pode ser considerado se você tiver arquivos esparsos.

É possível reduzir a sobrecarga de criptografia de ssh se você usar arcfour como código que funciona com o openSSH:

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

Para atualizar o caminho remoto, rsync é perfeito:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
    
por 22.08.2011 / 10:57
6

Eu recomendo que você tente alternativas, em vez de ir direto com o SSH para mover arquivos dentro de sua própria LAN, pois a sobrecarga é IMMENSE. Eu iria com a solução do Caspar se este, por qualquer motivo, não funcionasse para você:

Na fonte:

$ python3 -m http.server {PICK_YOUR_PORT}

No destino:

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

Isso não será apenas mais leve que o SSH, mas muito mais rápido com velocidades de 45 a 65 MiB no padrão CAT6 UTP. Se você realmente quiser extrair o máximo proveito da conexão, tente substituir wget por lftp e usar os comandos pget -n20 e mirror -r .

    
por 27.04.2014 / 08:30
3

Se tiver que ser feito na LAN, eu usaria rsync , pois ele vai continuar de onde parou se for interrompido. Ele também tem alguns outros truques para minimizar a quantidade de dados que são transferidos, embora eu duvide que muitos / qualquer um deles sejam relevantes para o caso de copiar uma biblioteca de músicas para um local virgem. Se a segurança é uma preocupação, basta definir RSYNC_RSH=ssh primeiro e os dados serão encapsulados em ssh.

Se eu estivesse realmente fazendo isso, no entanto, eu provavelmente não usaria a LAN. Eu copiava os arquivos para um disco rígido USB. Na minha experiência, isso pode facilmente ser muito mais rápido do que passar pela LAN, apesar de ter que copiar os arquivos duas vezes - o USB 2.0 é classificado para 480Mbps, que é mais rápido do que qualquer gigabit ethernet, além de ser menos sensível às condições que degradará o desempenho de uma LAN. Também é completamente independente do sistema operacional, desde que você use um sistema de arquivos que todas as máquinas envolvidas possam manipular - eu recomendaria o VFAT / FAT32, já que isso é praticamente universal.

    
por 22.08.2011 / 12:00
2

Eu sugeriria o rsync, pois ele copia arquivos de forma incremental. Você pode configurá-lo para copiar somente arquivos modificados ou novos somente depois de ter feito a atualização inicial. Você pode usar o ssh como uma camada de transporte, se desejar.

    
por 22.08.2011 / 11:03
1

Eu uso Unison , que é um incrível sincronizador de arquivos em muitos protocolos diferentes. Você pode configurá-lo para usar scp , rcp , ftp ou até mesmo localmente no sistema de arquivos entre duas pastas. Eu o uso para sincronizar minha biblioteca de músicas, já que ela pode transferir vários arquivos de uma só vez pela rede e é realmente sintonizável em sua configuração. Eu mantenho minha coleção de músicas em backup e em sincronia em mais de 2-3 computadores. Ele só copiará os arquivos alterados, e manterá um índice em ambas as extremidades da transferência, de modo a saber quando um cliente alterou o arquivo ou quando o arquivo do servidor foi alterado.

Sua milhagem pode variar, mas certamente é muito melhor do que scp ing toda a sua coleção de músicas toda vez que você adiciona uma nova música:)

    
por 26.11.2012 / 00:14
0

Eu segui o processo ssh para login sem senha primeiro link

Para scripts e arquivos de texto, o seguinte funciona bem para mim

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

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

Isso funciona para mim para transferir arquivos em sistemas embarcados que não possuem cliente ssh ou scp embutido.

Nenhum scp - somente ssh.

    
por 14.04.2016 / 22:18