나는이 문제에 대한 해결책을 알아내는 것이 즐거웠다. 두 시스템 모두에 도구 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을 다시 사용했습니다. 그러면 netcat이 수신하는 linux-a의 localhost에서 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을 사용할 수 있다면 문제의 유형에 대한 실용적인 해결책입니다.
편집 : 한 가지를 잊어 버렸습니다.이 지침을 따르면 여전히 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