Rsync sobre ssh com acesso root nos dois lados

14

Eu tenho um servidor ubuntu mais antigo e um servidor debian mais recente e estou migrando dados do antigo para o novo. Eu quero usar o rsync para transferir dados para facilitar a migração final e mais rápido que o processo tar / scp / untar equivalente.

Como exemplo, desejo sincronizar as pastas pessoais, uma de cada vez, com o novo servidor. Isso requer acesso root nas duas extremidades, pois nem todos os arquivos no lado de origem são legíveis pelo mundo e o destino deve ser gravado com as permissões corretas em / home. Não consigo descobrir como dar acesso ao rsync root nos dois lados.

Eu já vi algumas perguntas relacionadas, mas nenhuma corresponde exatamente ao que estou tentando fazer.

Eu tenho o sudo configurado e trabalhando nos dois servidores.

Tim Abell
fonte

Respostas:

14

Na verdade, você NÃO precisa permitir a autenticação de raiz via SSH para executar o rsync, como sugere Antoine. O transporte e a autenticação do sistema podem ser feitos inteiramente em contas de usuário, desde que você possa executar o rsync com o sudo nas duas extremidades para ler e gravar os arquivos.

Como usuário no servidor de destino, você pode sugar os dados do servidor de origem da seguinte maneira:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

O usuário que você executa nos dois servidores precisará de acesso * sudo sem senha ao binário rsync, mas você NÃO precisará habilitar o login ssh como root em qualquer lugar. Se o usuário que você estiver usando não corresponder na outra extremidade, você poderá adicionar user @ boron: para especificar um usuário remoto diferente.

Boa sorte.

* ou você precisará digitar a senha manualmente dentro da janela de tempo limite.

Caleb
fonte
5
Embora essa seja uma pergunta antiga, gostaria de acrescentar uma palavra de CUIDADO a esta resposta aceita. Pelo meu entendimento, permitir "sudo rsync" sem senha é equivalente a abrir a conta raiz para o login remoto. Isso ocorre porque com isso é muito fácil obter acesso root completo, por exemplo, porque todos os arquivos do sistema podem ser baixados, modificados e substituídos sem uma senha.
Ascurion 8/01/16
3

Se seus dados não forem altamente sensíveis, você poderá usar tare socat. Na minha experiência, isso geralmente é mais rápido do que rsyncover ssh.

Você precisa socatou netcatdos dois lados.

No host de destino, vá para o diretório em que você deseja colocar seus dados, após a execução:
socat TCP-LISTEN:4444 - | tar xzf -

Se o host de destino estiver ouvindo, inicie-o na fonte como:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Para esta configuração, você precisará de uma conexão confiável entre os 2 servidores.

zagyi
fonte
Bom ponto. Em um ambiente confiável, você ganhará muita velocidade ao não criptografar. Pode não importar em arquivos pequenos, mas com GBs de dados.
Pboin 18/05/10
2

Ok, eu reuni todas as pistas para conseguir algo que funcione para mim.

Vamos chamar os servidores "src" e "dst".

Configure um par de chaves para raiz no servidor de destino e copie a chave pública no servidor de origem:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Adicione a chave pública às chaves autorizadas da raiz no servidor de origem

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

De volta ao servidor de destino, insira os dados com o rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Tim Abell
fonte