Rsync Remoto para Remoto [duplicado]

6

Estou procurando uma solução para usar o rsync entre dois servidores remotos. Parece que não é possível. Alguém sabe por que não é possível? Pergunto isso porque acho que, se souber o motivo, talvez eu possa usar outra ferramenta para tornar isso possível.

Atualização: eu tenho um hipervisor no meu site principal com n vm em execução. Eu tenho outro hipervisor no meu site secundário que eu quero ser o servidor de backup para o meu servidor principal. Para manter o arquivo sincronizado entre esses dois, a melhor maneira que encontrei é usando o rsync. O problema é que não quero executar meu código (rsync) nas VMs porque quero que meu produto seja menos agente. Nesse caso, preciso adicionar um terceiro computador para executar o código. Agora, eu preciso rsync entre o meu site primário e secundário que eu estou preso porque o rsync não funciona para servidores remotos para remotos.

    
por AliBZ 26.07.2012 / 20:51

6 respostas

8

ssh user@server1 "rsync /files user@server2:/directory"
    
por 26.07.2012 / 20:59
4

Você pode usar ssh, com chaves públicas / privadas ssh para fazer isso de forma segura com o rsync.

O ssh pode autenticar com uma senha ou com um par de chaves público / privado. Nesta resposta, abordarei como configurar um par de chaves públicas / privadas ssh. Descrever o encaminhamento do ssh-agent e como usá-los com o rsync para sincronizar duas máquinas remotas.

Chave pública / privada de SSH

Você pode gerar um par de chaves ssh usando ssh-keygen , ele solicitará uma frase secreta, você desejará inserir algo seguro aqui. ele também irá gerar dois arquivos $ HOME / .ssh / id_rsa (não compartilhe isto), e $ HOME / .ssh / id_rsa.pub.

A chave pública (id_rsa.pub) pode ser compartilhada com qualquer pessoa sem medo de que sua conta seja comprometida por ela. Se alguém conseguir segurar sua chave privada, ela poderá autenticar em qualquer conta / máquina que esteja configurada para aceitar sua chave privada.

É aqui que a frase-senha é enviada. Assim, se alguém receber sua chave privada, ela ainda precisará saber a frase secreta.

authorized_keys

Durante o login, o ssh procura por um arquivo em $ HOME / .ssh / authorized_keys. Este arquivo é uma lista de chaves públicas que estão autorizadas a serem usadas para autenticação. Em suas máquinas remotas, você desejará anexar seu id_rsa.pub a este arquivo.

Durante as tentativas ssh, você será solicitado a inserir sua frase secreta em sua chave privada, em vez de sua senha.

ssh-agent

Você pode evitar ter que digitar sua senha repetidamente usando ssh-agent bash , seguido de ssh-add . Primeiro, ele executa um "chaveiro" anexado a ele e, em seguida, adiciona sua chave ao chaveiro. Agora, enquanto neste shell se o ssh é chamado, ele puxará sua chave privada do chaveiro em vez de solicitar a senha.

encaminhamento de agentes

Defina AllowAgentForwarding yes em / etc / ssh / sshd_config nos hosts remotos. Isso faz com que você possa fazer ssh de uma máquina para a qual você tenha sshed, para outro que tenha sua chave pública em authorized_keys e você não será solicitado a fornecer uma senha ou passphrase, pois ele irá lidar com a comunicação de volta ao keychain em sua máquina de origem.

comandos ssh

ssh permite que você envie um comando na máquina remota sem fornecer um shell, se você tiver a configuração acima, você pode fazer o seguinte:

ssh user1@remote_host1 'hostname;id'

Isso executará os comandos hostname e id em remote_host1 e usará sua chave sem avisar você. Deve devolver "remote_host1, user1"

Você também pode demonstrar o encaminhamento do agente com

ssh user1@remote_host1 'ssh user2@remote_host2 "hostname;id"'

Isso rodará o ssh user2@remote_host2 "hostname;id" no remote_host1, que então fará o ssh para o remote_host2 e executará os comandos. Ele devolve a solicitação de autenticação à sua máquina quando o encaminhamento do agente está ativo e usa a chave sem avisar você. Deve devolver "remote_host2, user2"

rsync

Agora você pode fazer o seguinte.

ssh remote_host1_user@remote_host1 "rsync -ave ssh  source_sync_dir remote_host2_user@remote_host2:target_sync_dir"

Isso diz ao remote_host1 para rsync a fonte no host_1 com o destino no host_2, e o rsync foi instruído a usar o ssh, que usará sua chave encaminhada.

    
por 26.07.2012 / 21:15
2

Se server1 e server2 puderem se conectar, as soluções acima funcionarão. Caso contrário, não tenho uma solução para o rsync, mas um antigo truque tar funcionará. Estou fazendo agora.

Prep: crie uma chave ssh sem passphrase e instale-a no arquivo authorized_keys da conta em cada servidor. Então faça isso:

$ ssh -i .ssh/my_key bob@server1 'tar -cf - -C sourcedir' | \
ssh -i .sh/my_key carol@server2 'tar -xvpf - -C targetdir'

Observe que você terminará com targetdir / sourcedir no server2.

Crédito: A ideia veio do livro da Administração do Sistema Oreilly com o tatu na capa. Acabei de inserir uma estação de trabalho no meio, já que server1 não pode falar diretamente com o server2.

    
por 08.05.2015 / 19:10
1

Eu quero sincronizar arquivos de serverA para serverB, mas não há conexão direta entre eles, mas tenho serverC que pode acessar serverA e serverB. o que funcionou para mim é:
no serverC:
ssh user@serverA 'rsync -avP -e "ssh -ax user@serverC ssh " /source/files user@serverB:/des/tination'

    
por 26.04.2016 / 13:11
0
gw_en_2_segmentos# ssh cuenta@ip_origen 'cd /carpeta_origen;star \
                           -acl -artype=exustar -z \
                           -c -f=- *' | ssh cuenta@ip_destino \
                                        'cd /carpeta_destino;star \
                                         -acl -artype=exustar -z -xv -f=-'

Fornecerá uma cópia remota a remota, com permissões de arquivo e ACLs POSIX

    
por 13.11.2012 / 18:56
-1

Supondo que você esteja usando * nix:

Adicione um cronjob que realize a sincronização para um dos servidores.

Se você quiser sincronizar tudo, desde o / home / user / sync_dir de um computador ao outro, e não pode ser incomodado em configurar o próprio rsync para os detalhes do diretório, eu prefiro fazer isto sobre o ssh. (Você precisará configurar as chaves para login, em vez de senhas, se estiver executando via cron).

rsync -ave "ssh" /home/user/sync_dir/ remote_user@remote_host:/home/user/remote_sync_dir/

    
por 26.07.2012 / 21:06