Eu me diverti muito tentando descobrir uma solução para esse problema. Requer a ferramenta nc (netcat) em ambas as máquinas e o SSH (SFTP não é necessário).
Neste exemplo, chamarei a máquina que possui os dados que precisam fazer o backup do linux-a e a máquina que precisa receber o backup linux-b.
No linux-a, tenha o netcat listen em uma porta (peguei 2000) e redirecione-o para um arquivo. Isso só vai ficar lá e esperar até que algo chegue nessa porta.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
No linux-b, abra um túnel ssh para o linux-a, usei a porta 2000 novamente.
Isso redirecionará qualquer coisa que você lançar na porta TCP 2000 no localhost 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 canalize para gzip para alguma compactação. Agora canalize isso para outro netcat que o envia para localhost no TCP na porta 2000.
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
Terminamos! No linux-b, o netcat não está mais atendendo 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ê tiver o netcat disponível, é uma solução viável para o seu tipo de problema.
Editar: Esqueci de uma coisa: se você seguir estas instruções, 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