Por que não é possível usar dois controles remotos para o rsync? [fechadas]

33

Quando a origem e o destino são remotos, o rsync reclama:

The source and destination cannot both be remote. rsync error: syntax or usage error (code 1) at main.c(1156) [Receiver=3.0.7]

Existe um obstáculo técnico insuperável para fazer o rsync fazer isso? Ou é simplesmente um caso de ainda não implementado? Parece relativamente fácil criar um buffer local na memória que medeia a transferência entre dois controles remotos, mantendo hashes e dados.

EDITAR

Como as pessoas estão fazendo algumas sugestões tangenciais, publiquei uma pergunta separada detalhando meu caso de uso específico. Estes são dois separados, realmente, e acho que vale a pena conhecer esses detalhes específicos para o rsync

goncalopp
fonte
1
Isso envolveria um src rsyncd remoto enviando dados para um rsyncd de destino remoto. Você pode contornar isso ssh'ing no sistema src e chamando o rsync.
precisa
@AlexHolst Eu não acho que isso funcionaria no meu caso particular. veja edit
goncalopp 18/11/2012
Desculpe, falha no servidor não lida com questões teóricas; Apenas perguntas respondidas sobre os problemas que você realmente enfrenta. Veja o FAQ para mais detalhes.
Chris S
2
Desculpe (moderadores), esta é uma pergunta interessante e respondível: O motivo é que o algoritmo rdiff não pode ser simétrico. Uma maior sobrecarga de CPU e memória está no lado "ativo". O lado "passivo" precisa apenas calcular somas de verificação de todos os blocos (consulte o parâmetro --block-size) de todos os arquivos modificados e reenviá-los. Isso é feito com requisitos de memória muito pequenos e a maioria das operações pode ser realizada no cache da CPU de primeiro nível. O lado "ativo" precisa pesquisar por um checksums onde o mesmo bloco de dados está localizado agora ...
hynekcer
1
Eu acho que essa é uma ótima pergunta (eu tinha exatamente essa pergunta, é por isso que estou aqui) e o motivo final é falso. Eu ainda quero saber a resposta!
Reinierpost

Respostas:

8

por que não tentar se conectar à máquina remota e iniciar a transferência a partir daí. Se você estiver usando ssh-keys, poderá usar o passe do agente para gerenciar a autenticação para você.

ssh -A remotehostA rsync /remote/file/on/host/a remoteHostB:/destination/

Este comando registrará você no remoteHostA e executará o rsync a partir daí.

Kaplaa
fonte
3
Há algumas considerações de segurança envolvidas. Veja edit
goncalopp
3
Além disso, isso não funcionará se você não tiver acesso direto entre os dois sistemas ... E se obter acesso direto envolve esperar duas semanas por uma seção de segurança para talvez implementar corretamente as regras de firewall ...
Gert van den Berg
1
Cenário: O servidor A possui acesso raiz com base em chave ao servidor B e C. Você deseja sincronizar de B para C usando o acesso raiz em ambos. Mas você não quer que B ou C tenham acesso root um ao outro.
thomasrutter
5
scp -3r <remote src> <remote dest>

não tem problemas para fazer isso.

Karma Fusebox
fonte
4
O scp não realiza deltas, AFAIK, e é extremamente necessário nesse caso. Mais detalhes sobre a minha edição
goncalopp 18/11/2012
4
Btw, SCP tem que ser com opções -3 se você gostaria de ser como um proxy entre os hosts
alterpub
Infelizmente, o scp não possui recursos importantes do rsync, por exemplo: opção de não atravessar sistemas de arquivos (por exemplo, unidade de rede montada na pasta do usuário), modo de arquivamento (no qual "links simbólicos, dispositivos, atributos, permissões, propriedades etc. são preservados"), etc. ...
Bastião
1

Você pode contornar isso montando um (ou ambos) sistemas de arquivos remotos com sshfs. Então, o rsync o tratará como se fosse local.

Infelizmente, isso resultará em muito uso de largura de banda na máquina cujo sistema de arquivos está montado sshfs; portanto, recomendo fazer isso apenas com a máquina que tem muita largura de banda entre você e a terceira máquina.

Obviamente, a solução ideal é que as máquinas conversem diretamente entre si. Não consigo pensar em nenhuma boa razão para que não devam.

Michael Hampton
fonte
veja editar. A razão pela qual você está se referindo é a segurança. Um comprometimento (raiz) de qualquer uma das duas máquinas não deve levar ao acesso do sistema de arquivos à outra. Mas talvez eu estou atacando isso a partir do ângulo errado e não há uma solução que não envolva uma terceira máquina ...
goncalopp
Hmm. Eu acho que esses detalhes realmente devem ser adicionados a esta pergunta. Quanto a um comprometimento raiz, você realmente deveria estar usando o SELinux.
Michael Hampton
Deixei este aqui porque outra pessoa pode estar interessada nesse comportamento no rsync em particular. O AFAIK, SELinux em qualquer uma das máquinas não pode dizer se a outra foi comprometida se o rsync em execução local tiver exatamente o mesmo comportamento nos dois casos (acesso do sistema de arquivos a um diretório específico).
Goncalopp 18/11/2012
Não tenho certeza se você entende como o SELinux funciona. O ponto principal é que ele impede que um serviço (mesmo um serviço comprometido) acesse coisas que ele não tem permissão explícita de acessar, mesmo que esse serviço seja executado como root.
Michael Hampton
Eu só tenho uma compreensão básica de políticas do SELinux, mas rsync é suposto para acessar o sistema de arquivos, não é? O mesmo tipo de padrão de acesso (local) é indesejável se a máquina remota estiver comprometida.
Goncalopp 18/11/2012