arquivos Rsync via host intermediário

9

Atualmente estou longe da minha LAN e preciso fazer um backup do meu laptop. Eu tenho uma cópia recente do meu laptop no meu servidor e geralmente faço backup do laptop usando o rsync. Agora eu quero fazer isso, mas fora da minha LAN.

Em suma, quero enviar dados de A para C via B, onde A é meu laptop, B meu roteador e C meu servidor.

Eu encontrei este comando: A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination , que funciona bem para transferir arquivos via scp - mas como eu já tenho a maioria dos dados no meu servidor, eu quero usar o rsync para sincronizar apenas o delta.

Eu tentei: A$ rsync file -e 'ssh B ssh' C , e isso funciona na medida em que sou solicitado a fornecer a senha para o usuário: C. No entanto, quando eu digito a senha nada acontece. O roteador está executando o Tomato v1.28 e não consigo configurá-lo para utilizar um arquivo de configuração ssh para permitir que ele efetue logon em C / o uma senha.

Alguma idéia de como fazer isso funcionar?

    
por GLaDER 20.08.2016 / 16:06

1 resposta

16

Esta questão é essencialmente respondida em outro lugar, incluindo aqui para scp e aqui para o rsync . Como o último inclui minha resposta, mas nenhuma resposta foi aceita, vou repeti-la aqui.

Como você observou, você pode usar a opção rsync -e | --rsh , mas será um pouco mais complicado:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

Ou, se a sua versão de ssh for nova o suficiente (OpenSSH > = v7.3), você poderá usar a opção -J ( ProxyJump )

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

Observe que estou usando -A (encaminhamento de agente), mas também deve funcionar com autenticação de senha se você não usar chaves, e, é claro, você pode substituir proxy por B e dest com C no seu exemplo.

Se por acaso você não tiver uma nova versão ssh (> = 5.3, IIRC), use a opção netcat em vez de -W para ssh :

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

Por fim, conforme observado nos comentários, você pode colocar o ProxyCommand em seu arquivo $HOME/.ssh/config para não ter uma linha de comando tão complicada. Especificamente, adicione algo assim:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

Ou usando ProxyJump para OpenSSH > = v 7.3:

Host C
  ProxyJump PROXYHOST

Então você deve ser capaz de fazer apenas:

rsync -azv foo/ C:./foo/
    
por 21.08.2016 / 17:21