Mi sono divertito molto a trovare una soluzione a questo problema. Richiede lo strumento nc (netcat) su entrambe le macchine e SSH (SFTP non è necessario).
In questo esempio, chiamerò la macchina che ha i dati di cui è necessario eseguire il backup di linux-a e la macchina che deve ricevere il backup linux-b.
Su linux-a, ascolta netcat su una porta (ho preso 2000) e reindirizzalo su un file. Questo siederà lì e aspetterà che qualcosa accada su quella porta.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
Su linux-b, apri un tunnel ssh su linux-a, ho usato di nuovo la porta 2000. Questo reindirizzerà qualsiasi cosa lanciate dalla porta TCP 2000 su localhost alla porta TCP 2000 su linux-a, dove netcat è in ascolto.
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
Ora crea l'archivio tar, ma invia l'output a stdout (usando -) e invialo a gzip per una certa compressione. Ora instradalo a un altro netcat che lo invia a localhost su TCP sulla porta 2000.
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
Sono stati fatti! Su linux-b netcat non è più in ascolto e viene creato un nuovo file. La parte migliore è che l'archivio tar non è mai stato posizionato sul disco rigido di 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
So che non è esattamente quello che hai chiesto nella domanda, ma se hai netcat disponibile, è una soluzione praticabile per il tuo tipo di problema.
Modifica: ho dimenticato una cosa: se segui queste istruzioni, avrai ancora un tunnel SSH che gira su Linux-a. Scopri qual è l'ID processo e uccidilo.
[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