ssh user@server1 "rsync /files user@server2:/directory"
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.
ssh user@server1 "rsync /files user@server2:/directory"
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.
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.
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.
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.
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.
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"
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.
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.
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'
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
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/
Tags rsync virtual-machines