Port tunnel dengan aman melalui host perantara

23

Saya ingin merutekan port untuk VNC kembali ke rumah saya di sini. Saya harus melompati satu host untuk kemudian melompat ke mesin kerja saya yang sebenarnya.

  • sittinghere akan menjadi mesin rumah lokal saya
  • hopper akan dengan hop menengah yang perlu saya buat
  • overthere akan menjadi mesin kerja jarak jauh

Saya bisa melakukan ini untuk SSH ke mesin kerja saya:

ssh -t hopper "ssh -t overthere"

Saya ingin menggunakan penerusan port untuk meneruskan port remote 5900 overthereke port lokal 5900 aktif sittinghere. Namun, saya lebih suka untuk dapat melakukannya tanpa mengikat ke port secara terbuka hopperkarena siapa pun di mesin itu akan dapat melampirkan ke koneksi VNC saya.

Apakah ada cara bagi saya untuk meneruskan port itu ke mesin lokal saya dengan aman tanpa ada yang bisa mengaksesnya hopper?

Naftuli Kay
sumber
Klien VNC apa yang Anda gunakan?
slm

Jawaban:

18

Menggunakan kemampuan asli SSH untuk meneruskan porta. Dari sittinghereeksekusi:

 ssh -v -N -L 5900:overthere:5900 user@hopper

Arahkan klien VNC Anda ke localhost:5900dan lalu lintas akan diteruskan ke overthere:5900melalui koneksi SSH yang dibuat padahopper

Sungai kecil
sumber
1
AFAIK, solusi ini tidak akan membantu Anda jika 5900 hanya terikat pada antarmuka lokal (127.0.0.1), karena terowongan terjadi hopper, dan kemudian hoppermeneruskan semua lalu lintas ke overthere:5900. Jika overthere:5900mendengarkan pada 0.0.0.0atau antarmuka yang diberikan, maka itu akan berfungsi, tetapi tidak jika itu mendengarkan 127.0.0.1.
Naftuli Kay
18

Saya akhirnya menggunakan beberapa ~/.ssh/configperetasan SSH untuk mewujudkan hal ini:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

Apa yang dilakukan adalah ketika saya mencoba untuk menyambung ssh overtheredari sittinghere, ia terhubung ke hopperdan kemudian memproksi koneksi SSH ke port 22 aktif overthere(yaitu: SSH aktif overthere).

Ini memiliki beberapa efek samping yang luar biasa:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

Semuanya berfungsi luar biasa dan sejauh yang saya tahu, 5900 tidak dibuka hopper, hanya diteruskan langsung dari overthereke sittinghere.

Naftuli Kay
sumber
Kebetulan, saya seharusnya menanyakan ini di komentar sebelumnya tetapi solusi yang Anda temui benar-benar keluar dari halaman manual x11nvc 8-). Maaf saya tidak berpikir untuk menanyakan server VNC apa yang Anda gunakan.
slm
Ini membuat saya takut, tetapi pasti berhasil!
Dale Anderson
1
Di beberapa distro Linux (misalnya Ubuntu 14.04) netcat-openbsd diinstal secara default. Dalam hal ini peretasan ini mungkin tidak berfungsi. Untuk memperbaiki masalah ini, Anda harus terlebih dahulu menginstal paket netcat-traditional ( apt-get install netcat-traditional -y). Maka Anda harus secara eksplisit menentukan ncjenis dalam file konfigurasi (dengan mengganti ncdengan nc.traditional).
VeLKerr
@Naftuli: Luar biasa!
pergi
1
@AlexanderPozdneev netcat .
taylorthurlow
1

Anda dapat meneruskan port dari sittinghereke overthereport SSH melalui hopper. Kemudian Anda dapat menggunakan port itu untuk mencapai overtherelangsung dari sittinghere. Dalam sesi SSH kedua ini, Anda dapat meneruskan VNC atau port apa pun yang Anda suka sambil hopperhanya melihat sesi SSH terenkripsi.

Sesi SSH pertama:

ssh -f -N -L 7022:overthere:22 hopper

Sekarang beri tahu klien SSH bagaimana hal itu dapat dicapai overtheredengan menambahkan konfigurasi ini ~/.ssh/configpadasittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Sesi SSH kedua:

ssh -f -N -L 5900:localhost:5900 overthere

Atau hanya sesi SSH interaktif reguler tanpa terowongan port VNC:

ssh overthere

Jika Anda tidak ingin repot menambahkan baris ke ~/.ssh/configAnda masih bisa mengatakannya bagaimana menghubungkan overtheredari baris perintah:

ssh -p 7022 hopper

... tetapi tanpa HostKeyAliasSSH tidak akan memverifikasi overtheresidik jari kunci dengan benar.

Semua baris perintah harus dijalankan sittinghere.

Kebetulan, saya pikir Anda mungkin tidak perlu menggunakan ssh's -tpilihan.

Celada
sumber
1

Pertama hubungkan hopper sambil membuat terowongan antara PC pekerja dan rumah.

ssh -f ismail@hopper -L 2222:overthere:22 -N

kemudian buat ssh ro ke sana dengan vnc tunnel

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

Sekarang Anda dapat terhubung dengan vnc. By the way mengubah konfigurasi vnc untuk mendengarkan localhost

ibaydan
sumber
0

Jika Anda menggunakan klien VNC vncviewerdari baris perintah, Anda dapat menggunakan -viasakelar untuk memberitahukannya ke tunnel user@hostsebelum menghubungkan ke server VNC host lain.

Contoh

$ vncviewer -via user@host localhost:0

Anda juga dapat menggunakan vinagreuntuk terhubung melalui terowongan SSH seperti itu melalui GUI. Untuk melakukannya atur koneksi Anda seperti ini melalui dialog koneksi di vinagre:

              ss # 1

Yang akan menghasilkan koneksi Anda muncul, terowongan melalui host SSH tunnel.

    ss # 2

Referensi

slm
sumber
0

Perintah berikut juga harus bekerja dengan sempurna

ssh -f -N -J hopper overthere -L 5900:localhost:5900

Itu diuji dengan parameter tambahan untuk menghubungkan server PostgreSQL aktif postgres-serverdi port yang disesuaikan ( -pswitch) dan juga dengan menggunakan nama pengguna yang disesuaikan.

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

Seperti yang Anda lihat solusi itu sederhana dan tidak memerlukan perubahan konfigurasi ssh atau langkah perantara apa pun.

SimonB
sumber