Melhor maneira de transferir arquivos através de uma LAN entre dois computadores Linux

Melhor maneira de transferir arquivos através de uma LAN entre dois computadores Linux

Quero transferir arquivos (uma pasta de música) entre dois computadores Linux. Depois de pesquisar a melhor maneira de fazer isso, percebi que existemgrande quantidadede maneiras de fazer isso. Eu sei que isso foi perguntadobastante,em todos os lugareseo tempo todo. O principal problema com isso é que não há 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).

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

Aqui está o que 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 os contras de cada um? Existem outras opções (melhores)? Quais são os parâmetros para escolher o melhor método (a solução pode depender do número de arquivos, tamanho do arquivo, facilidade vs. flexibilidade, ...)?

Responder1

Em um ambiente Linux, tanto para segurança quanto para facilidade de uso, ssh é a melhor opção. SSH, SSHFS, SCP e SFTP, conforme você lista, são apenas serviços diferentes criados com base no protocolo SSH. O SCP é muito fácil de usar, funciona exatamente como o CP, mas você pode fornecer nomes de usuários e máquinas no caminho. Portanto, poderíamos fazer um CP como cp ~/music/ ~/newmusic/, mas poderíamos facilmente scp ~/music/ user@host:~/newmusicenviá-lo para o computador chamado host. É isso aí - não precisamos configurar nada. Será solicitada a senha da conta na outra máquina se você não tiver certificado ou alguma outra autenticação configurada (o scp compartilha essas configurações com o ssh, é claro).

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 de SSH, por isso é seguro e requer apenas um servidor SSH. man sftpcontará tudo sobre como usá-lo. Eu não uso 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, para que o material da rede aconteça de forma totalmente transparente. SSHFS é para configurações semipermanentes, não apenas para transferência única de arquivos. É preciso um pouco mais de esforço para configurar, sobre o qual você pode ler emo 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.

Responder2

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

Para enviar um diretório, faça cd dentro do diretório cujo conteúdo deseja enviar no computador que está enviando e faça:

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

No computador que recebe o conteúdo, faça cd até onde deseja que o conteúdo apareça e faça:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

Substitua $REMOTE_HOSTpelo ip/hostname do computador que está enviando. Você também pode usar uma porta diferente em vez de 45454.

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

Exemplo rápido(usando localhost 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

Responder3

Para movimentos únicos, scp é recomendado.

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

Como o rsync tem muitos argumentos, geralmente o coloco em um shell pequeno para acertar (sempre). A ideia é enviar apenas coisas que mudaram desde a última vez que foi executado.

#!/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 diretório chamado "/home/media/music/" do computador local para o pc chamado 192.168.0.33, usando o usuário "nisse". E exclua tudo no destino que não exista no PC local.

Responder4

O mais rápido é provavelmente netcat(como descreveu Caspar).

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 root, preserva as permissões do arquivo. Ou use -pem ambos os lados. Também -Spode ser considerado se você tiver arquivos esparsos.

É possível reduzir a sobrecarga de criptografia sshse você usar arcfouruma cifra que funciona com 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

informação relacionada