Мені було дуже цікаво розшукувати рішення цієї проблеми. Для цього потрібен інструмент nc (netcat) на обох машинах і SSH (SFTP не потрібен).
У цьому прикладі я назву машину, яка має дані, для якої потрібно створити резервну копію linux-a, і машину, якій потрібно отримати резервну копію linux-b.
У linux-a майте netcat прослуховувати порт (я взяв 2000) і перенаправляйте його у файл. Це просто сидітиме там і чекатиме, поки щось не вийде на цьому порту.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
У linux-b відкрийте ssh-тунель для linux-a, я знову використовував порт 2000. Це дозволить перенаправити все, що ви перекинете через порт TCP 2000 з localhost на порт TCP 2000 на linux-a, де netcat слухає.
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
Тепер створіть архів tar, але надішліть вихід у stdout (використовуючи -) і передайте його в gzip для певного стиснення. Тепер передайте це іншому netcat, який надсилає його до localhost на TCP на порт 2000.
[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, це є життєздатним рішенням вашого типу проблем.
Редагувати: я забув про одне: якщо ви будете виконувати ці вказівки, у вас все одно буде тунель SSH, що плаває навколо linux-a. Дізнайтеся, що таке ідентифікатор процесу, і вбийте його.
[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