Me divertí mucho encontrando una solución a este problema. Requiere la herramienta nc (netcat) en ambas máquinas y SSH (no se necesita SFTP).
En este ejemplo, llamaré a la máquina que tiene los datos que necesitan respaldar linux-a, y la máquina que necesita recibir la copia de seguridad linux-b.
En linux-a, haga que netcat escuche en un puerto (tomé 2000) y rediríjalo a un archivo. Esto solo se quedará allí y esperará hasta que algo llegue a ese puerto.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
En linux-b, abra un túnel ssh en linux-a, utilicé el puerto 2000 nuevamente. Esto redirigirá todo lo que arroje en el puerto TCP 2000 en localhost al puerto TCP 2000 en linux-a, donde netcat está escuchando.
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
Ahora cree el archivo tar, pero envíe la salida a stdout (usando -) y canalícela a gzip para obtener algo de compresión. Ahora canalice eso a otro netcat que lo envíe a localhost en TCP en el puerto 2000.
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
Ya hemos terminado! En linux-b, netcat ya no escucha y se crea un nuevo archivo. La mejor parte es que el archivo tar nunca se colocó en el disco duro de 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
Sé que no es exactamente lo que pediste en la pregunta, pero si tienes netcat disponible, es una solución viable para tu tipo de problema.
Editar: Olvidé una cosa: si sigues estas instrucciones, todavía tendrás un túnel SSH flotando en linux-a. Descubra cuál es la ID del proceso y elimínelo.
[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