Arquivos Rsync via host intermediário

22

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

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

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

Eu tentei:, A$ rsync file -e 'ssh B ssh' Ce isso funciona tanto quanto me é solicitado que forneça a senha do usuário: C. No entanto, quando 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 faça logon com uma senha.

Alguma idéia de como fazer isso funcionar?

GLaDER
fonte
2
use o mesmo ProxyCommandno arquivo de configuração. Rsync deve pegar isso.
Jakuje 20/08/16

Respostas:

30

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

Como você observou, você pode usar rsynca -e | --rshopção, mas será um pouco mais complicado:

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

Ou, se sua versão do sshfor suficientemente nova (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 proxypor Be destcom Cno seu exemplo.

Se por acaso você não tiver uma sshversão nova o suficiente (> = 5.3, IIRC), poderá usar em netcatvez da -Wopção para ssh:

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

Por fim, como já observado nos comentários, você pode colocar o arquivo ProxyCommandem seu $HOME/.ssh/configarquivo para não precisar de uma linha de comando tão complicada. Especificamente, adicione algo como isto:

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

Ou, usando ProxyJumppara OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Então você deve conseguir:

rsync -azv foo/ C:./foo/
garça-vermelha
fonte