
Push File dari Server ke Client dengan teknik reverse SSH tunnel – Biasanya proses upload / push file dimulai dari sisi client ke server, hal itu memungkinkan karena server yang mempunyai IP public! Nah kalau client kan tidak punya, kecuali kalau punya fitur port forwarding.
Bisanya fitur port forwarding pada modem itu jarang sekali ada, sehingga kalian bisa menggunakan solusi seperti ngrok Membuat Service Tunneling di NGROK; Membuat Service AutoSSH untuk tunneling. Ngrok untuk versi gratis mempunyai batasan port yang digunakan serta bandwidth harian. Oleh sebab itu saya lebih suka menggunakan tunneling via VPS.
Anggap saja, kalian sudah mempunyai VPS dengan IP Public serta sudah diatur sshd nya untuk menerima tunneling. Remote PC dengan SSH Reverse Port Forward dan Tunneling Melalui via VPS.
Tunneling
Contents
Untuk Push File dari Server ke Client dengan teknik reverse SSH tunnel kalian harus aktifkan ssh tunneling terlebih dahulu, saya sarankan menggunakan autossh Membuat Service AutoSSH untuk tunneling
Dalam lingkungan di mana client berada di balik NAT atau firewall, seringkali sulit untuk “push” atau “pull” file langsung antara server dan client. Solusinya adalah dengan membuat reverse SSH tunnel dari client ke server, lalu memanfaatkan tunnel tersebut untuk transfer file menggunakan rsync
atau scp
Di client, buka tunnel ke server
Misalkan kita mempunyai komputer dengan nama paijo, yang akan melakukan tunneling ke server bejo@104.128.130.171. Agar selalu terhubung ke server, maka paijo menggunakan tunneling dengan membuka port nya di 8082
autossh -M 0 -N -R 8082:localhost:22 bejo@104.128.130.171
Untuk mengendalikan komputer paijo, maka kita bisa masuk terlebih dahulu ke server dan mengetikan perintah berikut
ssh -p 8082 paijo@localhost
Di server, jalankan rsync via tunnel
Setelah perintah diatas berjalan dengan baik, artinya server bisa menghubungi client paijo via tunnel ke server. Maka kita bisa Push File dari Server ke Client dengan teknik reverse SSH tunnel juga menggunakan rsync Rsync Untuk Sinkronisasi berbasis CLI; Upload dan download file ke server via Protokol SSH
perintahnya yaitub ketika sudah masuk ke sever gunakan perintah berikut
rsync -avz -e "ssh -p 8082 -o StrictHostKeyChecking=no" "home/bejo/nitip/server.py" "paijo@localhost:/home/paijo/nitip/"
Bagaimana Alurnya Data nya?
Karena kita jarang langsung duduk manis akses server. Tapi biasanya kita akan akses server dari PC lain
Misalkan
-
Kamu berada di PC A (Client A)
-
Kamu SSH ke server dari Client A
-
Kemudian dari dalam server, kamu ingin mengakses Client B
Alur Pertama (Client B melakukan tunneling dulu ke Server )
ssh -N -R 2222:localhost:22 user@203.0.113.10
Ini artinya:
-
Client B membuka reverse tunnel ke server
-
Server port
2222
→ ke Client B
Alur Kedua (Kamu Login dari PC A ke Server):
ssh user@203.0.113.10
sekarang posisi kamu ada di server
Alur ketiga Server ke Client B
setelah masuk di sisi server, maka ketikan perintah berikut
ssh client_user@localhost -p 2222
Jalur data untuk SSH ini:
Server (203.0.113.10) ──────▶ Client B (tunnel via koneksi yang dibuat Client B)
Jadi… apakah data lewat PC A?
Jawabannya: Tidak!
Koneksi SSH dan transfer data tidak melewati PC A karena:
-
PC A hanya digunakan untuk login ke server, bukan sebagai relay
-
Semua transfer data terjadi langsung antara Server dan Client B melalui koneksi yang Client B buat ke Server
Kalau kamu ingin PC A dilibatkan sebagai relay/penerus koneksi, itu baru beda cerita—itu butuh konfigurasi ProxyJump
atau -J
di SSH. Tapi untuk kasus kamu, PC A tidak ikut dalam jalur transfer file reverse SSH.
Apakah bisa push file dari client A ke client B menggunakan server sebagai penghubung nya?
Apakah bisa push file dari client A ke client B menggunakan server sebagai penghubung nya?
Transfer File dari Client A → Client B via Server
Asumsi:
-
Client A dan Client B tidak bisa akses langsung satu sama lain
-
Keduanya bisa akses server publik:
203.0.113.10
-
Kamu ingin kirim file dari A ke B
Caranya menggunakan jumpt host. Gunakan rsync
langsung dari Client A via SSH + ProxyCommand (Jump Host)
rsync -avz -e "ssh -o ProxyCommand='ssh sever@203.0.113.10 -W localhost:2222'" /path/file user_B@localhost:/tujuan/
tapi ingat ya, client B tetap harus reverse tunnel ke server!
ssh -N -R 2222:localhost:22 user@203.0.113.10
atau kalau mau agak ribet, bisa menggunakan
- File di Client A, ingin langsung ke Client B
- Opsi 1: rsync + ProxyCommand via Server
- File di Client A, bisa transit dulu ke Server
- Upload dulu, baru push dari Server