この問題の解決策を考え出すのはとても楽しかったです。両方のマシンにnc(netcat)ツールとSSH(SFTPは必要ありません)が必要です。
この例では、linux-aをバックアップする必要のあるデータがあるマシンと、バックアップlinux-bを受信する必要のあるマシンを呼び出します。
linux-aで、netcatにポート(2000を使用)で待機させ、それをファイルにリダイレクトします。これはただそこに座って、そのポートで何かが来るまで待機します。
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
linux-bでは、linux-aへのsshトンネルを開いて、ポート2000を再び使用しました。これにより、localhostのTCPポート2000でスローしたものはすべて、netcatが待機しているlinux-aのTCPポート2000にリダイレクトされます。
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
ここでtarアーカイブを作成しますが、出力をstdout(-を使用)に送信し、圧縮のためにgzipにパイプします。これを、ポート2000のTCPのlocalhostに送信する別のnetcatにパイプします。
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
終わったね!linux-bでは、netcatはリッスンしなくなり、新しいファイルが作成されます。最良の部分は、tarアーカイブが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
それがあなたが質問で正確に求めたものではないことは知っていますが、netcatが利用可能であれば、それはあなたのタイプの問題に対する実行可能な解決策です。
編集:私は1つのことを忘れていました。これらの手順に従えば、linux-aにSSHトンネルが浮かんでいることになります。プロセスIDが何であるかを調べて、強制終了します。
[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