ฉันสนุกกับการหาวิธีแก้ไขปัญหานี้ ต้องการเครื่องมือ nc (netcat) บนเครื่องทั้งสองและไม่จำเป็นต้องใช้ SSH (SFTP)
ในตัวอย่างนี้ฉันจะเรียกเครื่องที่มีข้อมูลที่ต้องสำรองข้อมูล linux-a และเครื่องที่ต้องได้รับ backup linux-b
บน linux-a ให้ netcat ฟังพอร์ต (ฉันใช้ 2000) และเปลี่ยนเส้นทางไปยังไฟล์ นี่จะนั่งตรงนั้นและรอจนกว่าจะมีอะไรผ่านเข้ามาในพอร์ตนั้น
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
บน linux-b เปิดอุโมงค์ ssh ไปยัง linux-a ฉันใช้พอร์ต 2000 อีกครั้ง สิ่งนี้จะเปลี่ยนเส้นทางสิ่งที่คุณส่งไปที่พอร์ต TCP 2000 บนโลคัลโฮสต์ไปยังพอร์ต 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 ค้นหาว่า 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