J'ai eu beaucoup de plaisir à trouver une solution à ce problème. Il nécessite l'outil nc (netcat) sur les deux machines et SSH (SFTP n'est pas nécessaire).
Dans cet exemple, j'appellerai la machine qui a les données qui doivent être sauvegardées sous linux-a, et la machine qui doit recevoir la sauvegarde linux-b.
Sur linux-a, faites écouter netcat sur un port (j'ai pris 2000) et redirigez-le vers un fichier. Cela restera juste là et attendra jusqu'à ce que quelque chose arrive sur ce port.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
Sur linux-b, ouvrez un tunnel ssh vers linux-a, j'ai de nouveau utilisé le port 2000. Cela redirigera tout ce que vous lancerez sur le port TCP 2000 sur localhost vers le port TCP 2000 sur linux-a, où netcat écoute.
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
Créez maintenant l'archive tar, mais envoyez la sortie à stdout (en utilisant -) et dirigez-la vers gzip pour une compression. Dirigez maintenant cela vers un autre netcat qui l'envoie à localhost sur TCP sur le port 2000.
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
Avaient fini! Sous linux-b, le netcat n'écoute plus et un nouveau fichier est créé. La meilleure partie est que l'archive tar n'a jamais été placée sur le disque dur 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
Je sais que ce n'est pas exactement ce que vous avez demandé dans la question, mais si vous avez Netcat disponible, c'est une solution viable à votre type de problème.
Edit: j'ai oublié une chose: si vous suivez ces instructions, vous aurez toujours un tunnel SSH flottant sur linux-a. Découvrez quel est l'ID de processus et supprimez-le.
[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