Eu me diverti muito tentando descobrir uma solução para esse problema. Requer a ferramenta nc (netcat) em ambas as máquinas e SSH (SFTP não é necessário).
Neste exemplo, chamarei a máquina que possui os dados que precisam fazer backup do linux-a e a máquina que precisa receber o backup linux-b.
No linux-a, faça o netcat escutar uma porta (peguei 2000) e redirecione-a para um arquivo. Isso fica parado e espera até que algo chegue nessa porta.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
No linux-b, abra um túnel ssh no linux-a, usei a porta 2000 novamente. Isso redirecionará qualquer coisa que você lançar na porta TCP 2000 no host local para a porta TCP 2000 no linux-a, onde o netcat está escutando.
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
Agora crie o arquivo tar, mas envie a saída para stdout (usando -) e envie-o para o gzip para obter alguma compactação. Agora canalize isso para outro netcat que o envia para o host local no TCP na porta 2000.
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
Foram realizadas! No linux-b, o netcat não está mais ouvindo e um novo arquivo é criado. A melhor parte é que o arquivo tar nunca foi colocado no disco rígido do linux-a.
[kenny@linux-b /var/backups]$ file backup.tgz
backup.tgz: gzip compressed data, from Unix, last modified: Thu Jul 5 13:48:03 2012
Eu sei que não é exatamente o que você pediu na pergunta, mas se você tem o netcat disponível, é uma solução viável para o seu tipo de problema.
Edit: Eu esqueci uma coisa: se você seguir estas instruções, você ainda terá um túnel SSH flutuando no Linux-a. Descubra qual é o ID do processo e mate-o.
[kenny@linux-a /var/data]$ ps -ef | grep "ssh -L"
kenny 5741 1 0 13:40 ? 00:00:00 ssh -L 2000:localhost:2000 -CfN linux-b
kenny 5940 3360 0 14:13 pts/1 00:00:00 grep --color=auto ssh -L
[kenny@linux-a /var/data]$ kill 5741