Encontrei uma maneira elegante de contornar esses problemas usando um canal nomeado . A idéia é executar o comando tar no lado remoto por meio de um soquete FIFO e torná-lo legível pelo usuário comum.
Aqui está um exemplo. No lado remoto, você primeiro cria o soquete:
remote$ sudo -s
remote# mkfifo -m 600 /home/anarcat/tmpfifo
remote# chown anarcat /home/anarcat/tmpfifo
No lado local, você já pode começar a ler esse soquete:
local$ ssh example.net "cat tmpfifo" | pv -s 2G | tar xfz -
(A parte pv -s 2G |
é totalmente opcional, para obter uma boa barra de progresso com o visualizador de canais .)
Então, no lado remoto, você pode começar a escrever:
remote# tar cfz /home/anarcat/tmpfifo files
Isso irá copiar files
através dessa conexão SSH. É claro, você também poderia ter criado esse tarball diretamente no servidor remoto e torná-lo acessível ao usuário, mas, em seguida, exigiria todo o espaço do arquivo, que pode não estar disponível.
Quando isso for feito, você poderá remover o fifo
como um arquivo simples:
remote$ rm /home/anarcat/tmpfifo