Cara menetapkan nama host ke terowongan SSH

16

Saya menggunakan ssh [email protected] -g -L 4321:localhost:28017 untuk membangun terowongan dari MacBook saya ke server khusus saya di penyedia hosting saya. Itu bekerja dengan baik. Sekarang saya ingin mengakses beberapa situs admin di server jauh (halaman status MongoDB, halaman RabbitMQ dll, semua di port yang berbeda). Semuanya terikat ke 127.0.0.1 pada mesin jarak jauh. Bagaimana saya bisa mengubah perintah ssh ini ke

  • tetapkan nama untuk terowongan dan gunakan mis. "my.tunnel.name" di browser saya
  • untuk dapat menentukan port jarak jauh di browser saya; Saya ingin terhubung ke my.tunnel.name:port, agar dapat memanggil situs yang berbeda

Apakah ini mungkin dengan ssh? Saya sudah membaca halaman manual dan mencari-cari di sekitar selama dua hari sekarang, tetapi sepertinya tidak berhasil.

--edit 2012-06-01 23: 36-- Berkat jawaban dan komentar yang diberikan, port forwarding berfungsi sekarang

ssh [email protected] -D 4321

Saya dapat mengatur ini sebagai proxy di browser saya dan browser akan memperlakukan setiap permintaan ke localhost: anyport seolah-olah dibuat di server jauh. Menggunakan nama sekarang tidak diperlukan, karena browser hanya untuk situs server jarak jauh.

brains_at_work
sumber

Jawaban:

12

Apa yang Anda gambarkan tidak mungkin. Tapi masih ada kabar baik:

Namun yang mungkin adalah untuk membuat koneksi Dinamis dengan Server SSH. Ini akan membuka porta pada komputer lokal Anda di mana Anda dapat mengarahkan pengaturan Proxy Browser Anda dan memungkinkan Anda untuk menggunakan terowongan sebagai server proxy. Tapi Anda harus mengetikkan nama host / ip dan port ke browser seolah-olah browser sedang berjalan di mesin SSH Server aktif.

Perintah terlihat seperti ini: ssh [email protected] -D 1234
Lalu arahkan proxy browser Anda ke localhost:1234.

Jadi jika Anda tunnel ke Server A, dan ingin terhubung ke server B, Anda mengetik ke browser Anda alamat apa pun yang Anda ketik di Browser yang berjalan di Server A. Jika browser yang berjalan di server A tidak dapat terhubung ke Server B (jika proses pada Server B hanya mendengarkan pada 127.0.0.1) maka Anda masih tidak dapat terhubung. Kedengarannya seperti Anda hanya memiliki satu server, tetapi saya ingin memastikan ini jelas.

Jika Anda hanya memiliki satu server, Anda menggali ke dalamnya dengan koneksi Dinamis, atur proxy Anda. Anda kemudian dapat mengetik "localhost: 1234" (misalnya) ke browser dan itu akan terhubung ke layanan yang berjalan di server jauh pada port 1234.

Catatan Sisi Securit: Jangan pernah membuat server tempat root dapat SSH! Kelemahan keamanan serius. Buat akun pengguna normal (yang diizinkan untuk su atau sudo) dan SSH sebagai pengguna itu.

Chris S
sumber
2
Anda menggunakan -L 1234 (penerusan porta lokal) saat Anda seharusnya menggunakan -D 1234 (pengalihan porta dinamis). Dan mungkin juga menghindari penggunaan -g, -g berarti bahwa host jarak jauh dapat terhubung ke forward Anda yang bukan yang Anda inginkan jika Anda melakukan ini dari workstation Anda.
Mattias Ahnberg
Terima kasih, Chris. Saya sudah mencobanya. Saya tidak dapat menggunakan perintah ssh hanya dengan port yang ditentukan. Ini mengembalikan kesalahan: "Spesifikasi penerusan lokal yang buruk '1234'"
brains_at_work
@ matthias-ahnberg: Bagus, itu berhasil. dengan penerusan dinamis, sekarang saya dapat menggunakan port sebagai proxy dan localhost: panggilan someport diarahkan ke server jauh.
brains_at_work
@MattiasAhnberg Wow, benar-benar hebat. Terima kasih atas koreksinya.
Chris S
Saya mengikuti proses ini tetapi mendapat kesalahan "Koneksi telah diatur ulang" di firefox.
rivu
23

Anda dapat menetapkan nama dengan menggunakan fakta bahwa adaptor loopback Anda pada dasarnya akan merespons alamat apa pun di jaringan 127.0.0.0/8.

Jadi, alih-alih mengikat ke port 4321 Anda bisa mengikat ke 127.1.2.3:4321. Kemudian cukup setup entri host yang memetakan nama ke alamat loopback yang Anda gunakan sehingga foo.bar memetakan 127.1.2.3.

Dalam konfigurasi SSH saya di admin workstation saya, saya memiliki banyak terowongan yang dikonfigurasi sehingga mereka mengikat ke beberapa alamat dalam rentang loopback, dan saya memiliki entri dalam file host saya jadi saya membuka banyak terowongan secara paralel menggunakan port yang sama dan membedakannya melalui nama.

Jadi jika Anda terhubung seperti ini

ssh [email protected] -g -L 127.1.2.3:4321:localhost:28017

Dan file host Anda memiliki garis seperti ini.

127.1.2.3 my.tunnel.name

Maka Anda harus dapat terhubung ke my.tunnel.name:4321 dari mesin lokal Anda.

Jika Anda memiliki ruang alamat IP tambahan di jaringan yang terhubung dengan klien ssh Anda, Anda bahkan dapat menetapkan alamat sekunder untuk antarmuka Ethernet Anda dan menggunakan salah satu IP asli Anda, dan kemudian mengatur entri dalam DNS Anda jika Anda ingin sistem lain dapat dapat untuk menggunakan terowongan SSH Anda.

Opsi -L -L [bind_address:]port:host:hostportakan memungkinkan Anda menggunakan alamat IP yang valid pada sistem lokal untuk mengikat. Anda perlu menyertakan -gopsi juga jika Anda ingin host lain dapat terhubung melalui ssh tunnel Anda.

Sakit kepala
sumber
Saya harus menambahkan ip ke loopback saya di osx. ifconfig l0 alias 127.0.1.1 255.255.255.0jika tidak tip yang bagus!
devians
1
Jika Anda tidak ingin shell dibuat, jalankan -Ndi akhir perintah. Dengan cara ini lebih mudah untuk mengingat bahwa itu adalah terowongan, bukan sembarang koneksi SSH.
mlissner
Saat menggunakan 127.1.2.3saya harus melakukan ini di macbook saya:, ifconfig lo0 alias 127.1.2.3 255.255.255.0yang ditambahkan 127.1.2.3sebagai alamat baru pada antarmuka lo0.
Donn Lee
5

Buat port tingkat penerusan aplikasi Dinamis (kaus kaki proxy pada dasarnya) dengan terowongan SSH Anda, dan kemudian arahkan aplikasi Anda melalui yang ini. Untuk membuat terowongan dinamis, sambungkan sebagai berikut:

ssh [email protected] -D 127.0.0.1:31337

Kemudian konfigurasikan aplikasi Anda untuk menggunakan ini sebagai proxy SOCKSv5.

Jika Anda ingin nama host terikat dengan ini, tambahkan saja /etc/hostsentri yang menunjuk ke 127.0.0.1, tetapi cara yang lebih cantik mungkin dengan menambahkan 127.0.0.2 untuk terowongan pertama, dan entri host untuk yang ini, 127.0.0.3 untuk yang kedua tunnel dan entri host terpisah untuk yang ini, dll. Jika Anda menambahkan alias untuk 127.0.0.1, kadang-kadang alias ini akan muncul dalam perintah pencarian lain dari localhost yang dapat membingungkan!

Untuk menggunakannya dengan lancar di browser web, Anda dapat menggunakan addon proxy, sebagai contoh saya mendukung browser web Chrome dan untuk yang ini saya menggunakan addon yang disebut Proxy Switchy!. Anda dapat mengunduhnya di sini:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

Dalam konfigurasi addon ini saya dapat mendefinisikan beberapa proksi yang terpisah, dan kemudian mengikat ekspresi reguler dari host / URL untuk menggunakan proksi tertentu, dengan cara ini saya akan selalu diarahkan dengan benar melalui terowongan yang tepat tanpa harus secara manual beralih. Harap beri tahu saya jika Anda membutuhkan klarifikasi lebih lanjut tentang salah satu langkah ini!

Mattias Ahnberg
sumber
Terima kasih atas tip pengaya. Karena saya juga menggunakan Chrome, saya tidak perlu membuka FireFox juga.
brains_at_work