SSH Reverse socks tunnel

26

ssh -D dapat membuat port kaus kaki di mesin lokal, yang melewati lalu lintas ke remote, lalu ke tempat lain.

ssh -L port:host:hostport, dengarkan port di mesin lokal, berikan lalu lintas ke "host: hostport" dari sudut pandang mesin jarak jauh.

ssh -R port:host:hostportadalah lawan dari ssh -L, yang mendengarkan port di mesin jarak jauh, dan meneruskan lalu lintas ke "host: hostport" dari sudut pandang mesin lokal.

Tapi apa yang terjadi ssh -D, misalnya, bagaimana membuka port kaus kaki di mesin jarak jauh, yang akan melewati lalu lintas ke lokal, lalu ke tempat lain?

Berry
sumber
1
pertanyaan kehilangan nilai karena Anda menerima jawaban yang tidak dan tidak bisa berfungsi. Ini (yang penjawab disebutkan dalam komentar) melakukannya meskipun stackoverflow.com/questions/842021/…
barlop

Jawaban:

12

Dengan -D& -LAnda memiliki cara untuk berkomunikasi dengan cara apa pun antara kedua mesin.

Begitu...

  • Dari mesin lokal, gunakan -Runtuk membuat port mendengarkan pada mesin jarak jauh yang menunjuk ke sshd mesin lokal.
  • Gunakan -Dpada mesin jarak jauh, arahkan ke port yang Anda buat di atas.

Saya "berpikir" mengisi di bawah ini akan membuatnya bekerja ...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

' remotehost', ' remoteport' & ' localport' di atas perlu diubah. Proksi kaus kaki akan dibentuk pada 9050.

Mahal
sumber
Oh, sepertinya ini ditanyakan pada SO: stackoverflow.com/questions/842021/…. Hanya jawabannya yang sama. Saya yakin orang akan bekerja ;-) EDIT - ya, yang itu lebih benar daripada milik saya. Saya telah menambal milik saya.
Mahal
Sebenarnya, saya memang menggunakan metode tidak langsung ini dalam situasi saya sendiri. Tetapi dalam situasi firend saya, dia tidak memiliki hak akses root, jadi dia tidak dapat memiliki layanan sshd, dia hanya memiliki klien OpenSSH. Jadi saya ingin mencari tahu ada metode langsung, tetapi OpenSSH tampaknya tidak ... Terima kasih sama
Berry
1
@barlop dan itu tidak akan berhasil karena mengatakan Anda menjalankan ssh yang dapat dieksekusi dari 10.0.0.10 -R mengatakan untuk meneruskan ke 10.0.0.10:9050 Tetapi server SOCKS berjalan pada 10.0.0.5
barlop
1
@ HargaChild apakah Anda benar-benar menguji perintah Anda?
barlop
5
-1 Anda tidak repot-repot mengujinya dan perintah Anda sepenuhnya salah. Anda mencoba membuatnya seperti jawaban SO yang lain tetapi gagal. SSHing dari A ke B, Yang Anda tautkan memiliki ssh -D dengarkan di A. Yang Anda dengarkan di B. Yang Anda salah. Anda memiliki proxy SOCKS yang mendengarkan di sisi yang mendengarkan.
barlop
14

Dapat dicapai secara transparan dengan cuplikan ini di ~ / .ssh / config:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

Detail

Kami ingin DynamicForward terbalik. Ini dicapai dengan menggunakan dua perintah ssh:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

Target cara ini memiliki terowongan SOCKS ke klien SSH.

Apa yang saya lakukan adalah menggunakan cara klasik chaining ssh untuk mencapai target jarak jauh melalui host perantara sehingga pembuatan terowongan SOCKS ditangani secara transparan saat masuk ke target. Trik ProxyCommand + nc pertama adalah wajib karena -W menyiratkan ClearAllForwardings.

pengguna305311
sumber
1
ini layak medali emas.
Dakatine
Bisakah Anda memberikan penjelasan yang lebih rinci tentang apa yang perintah Anda lakukan?
alonso s
3

Tidak ada fasilitas untuk menyediakan terowongan kaus kaki terbalik dengan OpenSSH, jadi Anda harus menjalankan perintah ssh yang menyediakan proxy kaus kaki pada mesin "remote".

Jika mesin jarak jauh tidak dapat ssh ke mesin lokal, buat terlebih dahulu koneksi ssh dari lokal ke jarak jauh yang meneruskan port 22 ke misalnya 2222. Kemudian mesin jarak jauh dapat ssh ke mesin lokal di port 2222.

Thorbjørn Ravn Andersen
sumber
2
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

sejak OpenSSH 7.6

ssh (1): menambahkan dukungan untuk penerusan dinamis terbalik. Dalam mode ini, ssh akan bertindak sebagai proxy SOCKS4 / 5 dan meneruskan koneksi ke tujuan yang diminta oleh klien SOCKS jarak jauh. Mode ini diminta menggunakan sintaks yang diperluas untuk opsi -R dan RemoteForward dan, karena hanya diterapkan pada klien, tidak mengharuskan server diperbarui untuk didukung.

https://www.openssh.com/txt/release-7.6

zmx
sumber
Bisakah Anda memberikan referensi untuk ini?
Scott
Ngomong-ngomong, ada bug di openssh-client 8.0 di mana Anda tidak dapat memilih alamat bind dengan port ( ssh -R 127.0.0.3:1080 remote), saat ini Anda dapat mengikat proxy SOCKS terbalik hanya ke port.
Adam Katz