GNU/Linux >> Belajar Linux >  >> Linux

Ssh – Bagaimana Cara Kerja Reverse Ssh Tunneling?

Seperti yang saya pahami, firewall (dengan asumsi pengaturan default) menolak semua lalu lintas masuk yang tidak memiliki lalu lintas keluar yang sesuai sebelumnya.

Berdasarkan Membalikkan koneksi ssh dan SSH Tunneling Made Easy, tunneling SSH terbalik dapat digunakan untuk mengatasi batasan firewall yang mengganggu.

Saya ingin menjalankan perintah shell pada mesin jarak jauh. Mesin jarak jauh memiliki firewall sendiri dan berada di belakang firewall tambahan (router). Ini memiliki alamat IP seperti 192.168.1.126 (atau yang serupa). Saya tidak berada di belakang firewall dan saya tahu alamat IP mesin jarak jauh seperti yang terlihat dari Internet (bukan alamat 192.168.1.126). Selain itu, saya dapat meminta seseorang untuk mengeksekusi ssh (something) sebagai root pada mesin jarak jauh terlebih dahulu.

Adakah yang bisa menjelaskan kepada saya, langkah demi langkah, cara kerja tunneling SSH terbalik untuk mengatasi firewall (firewall mesin lokal dan jarak jauh dan firewall tambahan di antaranya)?

Apa peran sakelar (-R , -f , -L , -N )?

Jawaban yang Diterima:

Saya suka menjelaskan hal semacam ini melalui visualisasi.

Pikirkan koneksi SSH Anda sebagai tabung. tabung besar. Biasanya, Anda akan menjangkau melalui tabung ini untuk menjalankan shell di komputer jarak jauh. Shell berjalan di terminal virtual (tty). Tapi Anda sudah tahu bagian ini.

Pikirkan terowongan Anda sebagai tabung di dalam tabung. Anda masih memiliki koneksi SSH yang besar, tetapi opsi -L atau -R memungkinkan Anda mengatur tabung yang lebih kecil di dalamnya.

Setiap tabung memiliki awal dan akhir. Tabung besar, koneksi SSH Anda, dimulai dengan klien SSH Anda dan berakhir di server SSH yang Anda sambungkan. Semua tabung yang lebih kecil memiliki titik akhir yang sama, kecuali bahwa peran "mulai" atau "akhir" ditentukan oleh apakah Anda menggunakan -L atau -R (masing-masing) untuk membuatnya.

(Anda belum mengatakannya, tetapi saya akan berasumsi bahwa mesin "jarak jauh" yang Anda sebutkan, yang berada di belakang firewall, dapat mengakses Internet menggunakan Terjemahan Alamat Jaringan (NAT). Ini agak penting, jadi mohon perbaiki asumsi ini jika salah.)

Saat Anda membuat terowongan, Anda menentukan alamat dan port yang akan dijawab, dan alamat dan port yang akan dikirimkan. -L option memberi tahu terowongan untuk menjawab di sisi lokal terowongan (host yang menjalankan klien Anda). -R opsi memberitahu terowongan untuk menjawab di sisi jarak jauh (server SSH).

Jadi… Untuk dapat SSH dari Internet ke mesin di belakang firewall, Anda memerlukan mesin tersebut untuk membuka koneksi SSH ke dunia luar dan menyertakan -R terowongan yang titik "masuknya" adalah sisi "jauh" dari koneksinya.

Dari dua model yang ditampilkan di atas, Anda menginginkan yang di sebelah kanan.

Terkait:Apakah ada cara untuk bekerja dengan CollectionViews bersarang di Xamarin Forms dengan MvvmCross??

Dari host yang di-firewall:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com

Ini memberitahu klien Anda untuk membuat terowongan dengan -R titik masuk emote. Apa pun yang terhubung ke port 22222 di ujung terowongan akan benar-benar mencapai "localhost port 22", di mana "localhost" dilihat dari titik keluar terowongan (yaitu klien ssh Anda).

Pilihan lainnya adalah:

  • -f memberi tahu ssh ke latar belakang sendiri setelah diautentikasi, jadi Anda tidak perlu duduk-duduk menjalankan sesuatu di server jauh agar tunnel tetap hidup.
  • -N mengatakan bahwa Anda menginginkan koneksi SSH, tetapi Anda sebenarnya tidak ingin menjalankan perintah jarak jauh apa pun. Jika semua yang Anda buat hanyalah terowongan, menyertakan opsi ini akan menghemat sumber daya.
  • -T menonaktifkan alokasi pseudo-tty, yang sesuai karena Anda tidak mencoba membuat shell interaktif.

Akan ada verifikasi sandi kecuali Anda telah menyiapkan kunci DSA atau RSA untuk login tanpa sandi.

Perhatikan bahwa SANGAT disarankan agar Anda menggunakan akun sekali pakai (bukan login Anda sendiri) yang Anda siapkan hanya untuk tunnel/pelanggan/server ini.

Sekarang, dari shell Anda di yourpublichost , buat koneksi ke host berfirewall melalui terowongan:

ssh -p 22222 [email protected]

Anda akan mendapatkan tantangan kunci host, karena Anda mungkin belum pernah mencapai host ini sebelumnya. Kemudian Anda akan mendapatkan tantangan kata sandi untuk username akun (kecuali Anda telah menyiapkan kunci untuk login tanpa kata sandi).

Jika Anda akan mengakses host ini secara rutin, Anda juga dapat menyederhanakan akses dengan menambahkan beberapa baris ke ~/.ssh/config Anda berkas:

host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

Sesuaikan remotehostname dan remoteusername sesuai. remoteusername kolom harus cocok dengan nama pengguna Anda di server jarak jauh, tetapi remotehostname dapat berupa nama host apa pun yang cocok untuk Anda, tidak harus cocok dengan apa pun yang dapat diselesaikan.

  • Mengekspos titik akhir terbalik pada non-localhost IP
  • Kiat menggunakan ControlMaster untuk memelihara terowongan Anda

Linux
  1. Cara Mengatur Tunneling SSH

  2. Ssh – Bagaimana Tcp-keepalive Bekerja Di Ssh?

  3. Cara Mengatur Terowongan SSH Terbalik di Linux

  1. Bagaimana rm bekerja? Apa yang rm lakukan?

  2. Bagaimana sebenarnya sig_atomic_t bekerja?

  3. Bagaimana cara kerja debugger di Linux?

  1. Apa itu NGINX? Bagaimana cara kerjanya?

  2. Bagaimana cara kerja perintah ps?

  3. Bagaimana Kerberos bekerja dengan SSH?