Copiar arquivos sem criptografia (ssh) na rede local

22

scpfunciona bem em todos os casos, mas o Raspberry Pi é muito fraco para copiar arquivos com eficiência em um ambiente seguro (lan). Teoricamente possível, 6,75 MB / s via LAN sem fio de 54 Mbit diminuem para cerca de 1,1 MB / s.

Existe uma maneira de copiar arquivos remotamente sem criptografia?

Deve ser um comando cli sem dependências para serviços extras (ftp, samba) ou pelo menos com um mínimo de configuração. Quero dizer, uma ferramenta padrão que funciona muito bem com os programas / serviços padrão (como scp / ssh).

ManuelSchneid3r
fonte
2
"sem nenhuma dependência" praticamente não é possível. você sempre precisa de um programa que "escuta" de um lado (como o servidor ssh / sftp ao usar scp)
trema
2
E o netcat ?
31514 Yegorich
Ok, você está certo. Eu vou mudar os requisitos
ManuelSchneid3r
@ umläute, a menos que o Cliente possa ssh / rsh para o servidor e se comunicar através de stdin / out. Antigamente, canalizar o tar para um tar invocado remotamente era o caminho para copiar facilmente as árvores de diretório de uma máquina para outra.
Thorbjørn Ravn Andersen 29/09

Respostas:

14

Você pode estar procurando rcp, ele executa execução remota via, rshassim você terá que confiar nisso e ter em mente que toda a comunicação é insegura.

YoMismo
fonte
12

Você não pode desativar a criptografia completamente no ssh / scp, mas pode forçá-lo a usar uma cifra mais fraca que consome muito menos CPU. Certifique-se de que a compactação não esteja ativada no ssh_config ou na linha de comando e adicione -c arcfour,blowfish-cbcà sua linha de comando scp para selecionar cifras mais fracas.

doneal24
fonte
1
Esta é uma boa ideia. Isso é possível para configurações específicas do host? (.ssh / config)
ManuelSchneid3r
3
@ ManuelSchneid3r: Sim: em uma Hostseção do seu ssh_config, use Ciphers arcfour,blowfish-cbcpara espelhar a -copção acima . No entanto, se suas CPUs suportam o conjunto de instruções AES-NI, eu tentaria mudar para [email protected](sim, esse é o nome da cifra, incluindo o @material), que usará o incrivelmente rápido (com AES-NI) AES128-GCM.
Reid
Eu realmente não chamaria blowfish de cifra fraca e, em geral, (ou seja, não R-Pi), os AEs podem ser impulsionados pela aceleração de hw.
Peterph
9

Eu escrevi este script rápido:

#!/bin/bash

ssh "$1" "nc -l 2020 > \"$2\" &"
pv "$2" | nc "$1" 2020

São necessários dois argumentos, o host para enviá-lo e o arquivo para o qual você está enviando. Funciona apenas para um arquivo. Ele usa ssh para iniciar uma netcatescuta no lado oposto e depois netcatenvia para essa porta de escuta. Eu adicionei pvao início uma barra de progresso agradável. Substitua pvpor catse você não tiver ou quiser isso. Mude a porta 2020 para o que quiser. Isso requer que você tenha acesso ssh ao sistema remoto.

Isso é completamente inseguro, mas é isso que você queria.

Ben Collins
fonte
9

Acho que o NFS é bastante subestimado para esse tipo de tarefa, onde você deseja comodidade, rapidez e não se preocupa com segurança. O NFS é realmente simples de configurar, especialmente no cliente: consulte este pequeno guia para o ubuntu , junto com esta página de ajuda da comunidade ubuntu, mais longa . Do ponto de vista do cliente que você acabou de montar o diretório do servidor e ele se parece com uma unidade local e você pode usar cpou rsyncou qualquer comandos que você deseja.

TooTone
fonte
Quais são as suas experiências com que tipo de velocidade esperar?
Thorbjørn Ravn Andersen 06/01
1
@ Thorbjørn Ravn Andersen para NFS usando Gigabit Ethernet e SSDs PCIe3 x4, achei que a rede era o gargalo. Usando QDR Infiniband em vez de Ethernet de gigabit, os SSDs foram o gargalo. O servidor NFS do kernel do Linux é relativamente baixo.
Eric M
4

Existem correções para o openssh para HPC (High Performance Computing) que melhoram a taxa de transferência ssh aumentando os tamanhos das janelas de transferência e desativando a criptografia - se você não se importa em recompilar (e provavelmente correções de portabilidade), verifique HPN-SSH . Como BowlOfRed reparou no comentário, você precisa usar os patches em tanto o cliente e servidor.

Você também pode usar rsync- em uma máquina como um daemon e como um cliente simples na outra. É particularmente útil para sincronizar volumes maiores através de um link de rede mais lento que a leitura (e a soma de verificação) dos arquivos, pois é capaz de transferir apenas as partes dos arquivos que diferem entre cliente e servidor. Veja as páginas do manual rsync(1)e rsyncd.conf(5)para detalhes.

peterph
fonte
4
Isso não foi explícito na sua resposta, mas esses patches incluem a capacidade de usar a cifra "none" no SSH (em outras palavras, desabilite a criptografia completamente). A desvantagem é que você deve aplicar e executá-lo nas duas extremidades. Um servidor normal não aceita a cifra "none".
precisa saber é o seguinte
Muito bom ponto!
Peterph
4

O script bash acima, de Ben Collins, é uma boa solução, mas ele não possui o -psinalizador da porta no lado do servidor. Executá-lo como está seria apenas fornecer um arquivo vazio ou um servidor travado que nunca faz nada.

É mais fácil ver o que isso está fazendo se você apenas observar os comandos.

DestinationShell# nc -l -p 2020 > file.txt

SourceShell# cat file.txt | nc dest.ip.address 2020

nc, ou netcat, é como cat, exceto que a saída é ecoada em outra máquina por meio de uma conexão TCP. Você está apenas enviando a saída de nc no servidor para o arquivo de destino. Você pode configurar o destino da mesma maneira e fazer echo foo | nc dest.ip.address 2020e fazer todo tipo de coisa com nc.

Preston Louis Ursini
fonte
2

já faz algum tempo desde a última atualização, algumas cifras foram alteradas e, pelo menos no freeBSD, o blowfish não está mais disponível. A cifra mais rápida que encontrei nas instalações ssh atuais é -c aes128-cbc.

Apreciar.

Elmars
fonte
0

Se você deseja transferir estruturas de arquivos inteiras, use tar.

no sistema receptor:

[]# nc -l 2020 | tar xvf -

depois no sistema de envio:

[]# tar cvf - | nc dst.hostname.net 2020

Assista o arquivo morto em um sistema e extraia no outro;)

user288759
fonte