Rumah  >  Artikel  >  Java  >  Terowong SSH dengan Java

Terowong SSH dengan Java

DDD
DDDasal
2024-09-22 06:16:03587semak imbas

SSH Tunnelling with Java

Anda menarik nafas lega, kerana QA telah meluluskan ciri yang telah lama ditunggu-tunggu untuk digunakan pada Prod. Walau bagaimanapun, sebagai sebahagian daripada proses, ia mula-mula digunakan pada env UAT, di mana terdapat akaun ujian yang boleh digunakan untuk mengesahkan ciri berfungsi di luar pembangun tempatan dan sistem ujian QA.

Tetapi... menjalankan suite ujian mengakibatkan banyak kegagalan!


Balas dengan "Tetapi ia berfungsi pada mesin saya!"

Apa yang anda lakukan? Anda pasti bahawa kod itu berfungsi. Pasti pasti. Mungkin masalahnya adalah dengan persekitaran UAT itu? Tetapi apa yang boleh menjadi masalah dengan alam sekitar? Mungkin akaun ujian yang baru dibuat, dikonfigurasikan secara salah? Mungkin ya, anda fikir. Anda mempunyai akses kepada log untuk persekitaran, tetapi senario yang gagal, terhad kepada tiada log untuk mengenal pasti masalah. Anda secara dalaman mengutuk pembangun nenek moyang anda.

Pilihan lain? Penyahpepijatan jauh! Walaupun ini idea yang baik, ia jarang praktikal untuk persekitaran di mana apl digunakan secara berterusan. Jika kod anda berada dalam "laluan panas", semoga berjaya mengetahui permintaan anda. Ia juga mungkin memperlahankan apl dengan ketara.

Pada asasnya, apa yang anda mahukan ialah menyahpepijat aplikasi, seolah-olah ia digunakan pada mesin tempatan anda, tetapi pangkalan data pelayan UAT. Tetapi oleh kerana pelayan UAT tidak secara langsung boleh diakses oleh aplikasi tempatan anda, anda tidak bernasib baik.

Atau adakah anda? Jangan risau, kerana Terowong SSH ada untuk menyelamatkan anda.

Terowong SSH

Apakah itu Terowong SSH? Dan bagaimana cara saya menggunakannya?

Jawapan ringkas:

SSH Tunneling akan membolehkan aplikasi anda berkelakuan seolah-olah ia digunakan pada sistem jauh, yang melaluinya pangkalan data UAT boleh diakses.

Jawapan panjang:

Arahan ssh Linux menyediakan fungsi untuk "port forward". Diakui, istilah "port forward" agak tidak deskriptif. Oleh itu, saya akan membenarkan StackOverflow memberikan kepada anda penjelasan terperinci dan lebih mudah tentang SSH Tunneling daripada apa yang saya boleh di sini. Anda boleh membacanya di sini: https://unix.stackexchange.com/a/115906. Saya syorkan anda membaca jawapan kerana ia mempunyai gambar rajah yang jauh mudah difahami berbanding jawapan berasaskan teks.

Walau bagaimanapun, saya masih akan menyalin bahagian yang berkaitan di sini.

ssh -L 123:farawayhost:456 remotehost

setempat: -L Menentukan bahawa port yang diberikan pada hos setempat (klien) akan dimajukan ke hos yang diberikan dan port di bahagian jauh.
ssh -L sourcePort:forwardToHost:onPort connectToHost bermaksud: sambung dengan ssh untuk connectToHost, dan majukan semua percubaan sambungan ke local sourcePort ke port onPort pada mesin yang dipanggil forwardToHost, yang boleh dicapai daripada mesin connectToHost.

Contoh

Untuk kes penggunaan kami, arahan sampel kami ialah:

ssh -L 568e74c5956ba89112fe7fdaabb41460:b2f665a9b90666d6a83e424219399c6f:dc3263fd61fcd67fbc142f42df1434e2 5d52d8acfe7b7e4852ce923bbefbb027

Perhatian, di sini JumpHost ialah sistem yang boleh menyambung ke b2a03d4bf4d4722aed2472690d228e91 dengan port 117e75ae29d427fe034e4aadc346f5ed.

Setelah kami mengetahui perkara ini, segala-galanya adalah kek!

Anda hanya boleh menjalankan arahan dan anda akan dapat mengakses Pangkalan Data UAT pada hos tempatan anda:568e74c5956ba89112fe7fdaabb41460. Hampir terasa seperti sihir!

Jika anda perlu menyambung ke berbilang pangkalan data, anda perlu menjalankan arahan ini beberapa kali. Atau anda boleh menulis skrip bash yang boleh membaca fail konfigurasi secara dinamik untuk membuka berbilang Terowong SSH.

Saya, sebagai pengaturcara Java, lebih suka berurusan dengan kod Java yang disusun secara statik, daripada bimbang tentang bahasa yang ditaip secara dinamik seperti bash. Jadi, saya menggunakan perpustakaan jsch untuk menyiapkan projek yang boleh diperluaskan, yang mencipta dan mengekalkan berbilang Terowong SSH. Anda boleh menyemaknya di sini: https://github.com/darshitpp/java-ssh-tunnel

Struktur

java-ssh-tunnel
└── src
    └── main
        ├── java
        │   └── dev
        │       └── darshit
        │           └── java_ssh_tunnel
        │               ├── Main.java
        │               ├── MultiTunneler.java
        │               ├── Tunneler.java
        │               └── ssh
        │                   ├── TunnelDetails.java
        │                   └── UserDetails.java
        └── resources


Penggunaan

  1. Muat turun projek
  2. Muat dalam IDE anda
  3. Jalankan pemasangan bersih mvn
  4. Tukar Main.java dengan butiran yang diperlukan seperti nama pengguna SSH, kata laluan SSH, JumpHost sshHost
  5. (Pilihan) Mungkin memuatkan butiran localPort, remoteHost dan remotePort daripada fail
  6. Jalankan Main.java

Jika semuanya berjalan lancar, anda akan melihat output berikut pada stdout anda

Starting tunneling...
ddcb5c1bacff0836f10cdd2321f9f344:8a6b8c664579886bf5b95b43fd19938f is available on localhost:64967425d451d2d8f5c2863f9f50868c
Press Enter to terminate the tunnels...

Kaveat

Walaupun perkara di atas sangat mudah, JANGAN GUNAKANNYA UNTUK MENGHUBUNGKAN PROD. Ya, itu perlu ditulis dalam huruf tebal dengan penekanan. Bolehkah saya mencetak mesej kepada stderr juga? Komen di bawah.

Atas ialah kandungan terperinci Terowong SSH dengan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn