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, tapi saya akan berasumsi bahwa mesin "remote" yang Anda sebutkan, yang ada di balik firewall, dapat mengakses Internet menggunakan Network Address Translation (NAT). Ini agak penting, jadi perbaiki asumsi ini jika salah.)
Saat Anda membuat terowongan, Anda menentukan alamat dan port yang akan dijawabnya, dan alamat serta port yang akan dikirimkannya. The -L
pilihan memberitahu terowongan untuk menjawab di sisi lokal terowongan (host menjalankan klien Anda). The -R
pilihan memberitahu terowongan untuk menjawab di sisi remote (SSH server).
Jadi ... Untuk dapat SSH dari Internet ke mesin di belakang firewall, Anda memerlukan mesin yang dimaksud untuk membuka koneksi SSH ke dunia luar dan menyertakan sebuah -R
terowongan yang titik "masuknya" adalah sisi "jauh" dari koneksinya.
Dari dua model yang ditunjukkan di atas, Anda ingin yang di sebelah kanan.
Dari host yang di-firewall:
ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com
Ini memberi tahu klien Anda untuk membuat terowongan dengan -R
titik masuk emote. Apa pun yang melekat pada port 22222 di ujung terowongan akan benar-benar mencapai "localhost port 22", di mana "localhost" adalah dari sudut pandang titik keluar terowongan (yaitu klien ssh Anda).
Pilihan lainnya adalah:
-f
memberitahu ssh ke latar belakang sendiri setelah diautentikasi, jadi Anda tidak perlu duduk menjalankan sesuatu di server jauh agar terowongan tetap hidup.
-N
mengatakan bahwa Anda menginginkan koneksi SSH, tetapi Anda sebenarnya tidak ingin menjalankan perintah jarak jauh. Jika semua yang Anda buat adalah sebuah terowongan, maka memasukkan opsi ini menghemat sumber daya.
-T
menonaktifkan alokasi pseudo-tty, yang sesuai karena Anda tidak mencoba membuat shell interaktif.
Akan ada tantangan kata sandi kecuali Anda telah mengatur kunci DSA atau RSA untuk login tanpa kata sandi.
Perhatikan bahwa SANGAT disarankan untuk menggunakan akun yang dibuang (bukan login Anda sendiri) yang Anda siapkan hanya untuk terowongan / pelanggan / server ini.
Sekarang, dari shell Anda di yourpublichost , buat koneksi ke host firewall melalui terowongan:
ssh -p 22222 username@localhost
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 jika Anda sudah menyiapkan kunci untuk masuk tanpa kata sandi).
Jika Anda akan mengakses host ini secara teratur, Anda juga dapat menyederhanakan akses dengan menambahkan beberapa baris ke ~/.ssh/config
file Anda :
host remotehostname
User remoteusername
Hostname localhost
Port 22222
Sesuaikan remotehostname
dan remoteusername
sesuai. The remoteusername
lapangan harus sesuai nama pengguna pada remote server, tetapi remotehostname
dapat berupa nama host yang cocok untuk anda, itu tidak harus mencocokkan apa pun diatasi.
(Untuk mengekspos titik akhir terbalik pada IP non-localhost , lihat posting ini )