Tôi đã có rất nhiều niềm vui để tìm ra một giải pháp cho vấn đề này. Nó yêu cầu công cụ nc (netcat) trên cả hai máy và SSH (SFTP không cần thiết).
Trong ví dụ này, tôi sẽ gọi máy có dữ liệu cần sao lưu linux-a và máy cần nhận bản sao lưu linux-b.
Trên linux-a, có netcat lắng nghe trên một cổng (tôi lấy 2000) và chuyển hướng nó đến một tệp. Điều này sẽ chỉ ngồi ở đó và chờ cho đến khi một cái gì đó đi qua trên cổng đó.
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
Trên linux-b, mở một đường hầm ssh sang linux-a, tôi đã sử dụng lại cổng 2000. Điều này sẽ chuyển hướng bất cứ thứ gì bạn ném vào cổng TCP 2000 trên localhost sang cổng TCP 2000 trên linux-a, nơi netcat đang lắng nghe.
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
Bây giờ tạo kho lưu trữ tar, nhưng gửi đầu ra tới thiết bị xuất chuẩn (bằng cách sử dụng -) và chuyển nó sang gzip để nén. Bây giờ chuyển sang một netcat khác gửi nó đến localhost trên TCP trên cổng 2000.
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
Đã được thực hiện! Trên linux-b, netcat không còn nghe và một tệp mới được tạo. Phần tốt nhất là kho lưu trữ tar không bao giờ được đặt trên đĩa cứng của 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
Tôi biết đó không chính xác là những gì bạn đã yêu cầu trong câu hỏi, nhưng nếu bạn có sẵn netcat, thì đó là một giải pháp khả thi cho loại vấn đề của bạn.
Chỉnh sửa: Tôi đã quên một điều: nếu bạn làm theo các hướng dẫn này, bạn vẫn sẽ có một đường hầm SSH nổi trên linux-a. Tìm hiểu ID tiến trình là gì và giết nó.
[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