Proksi http lewat ssh, bukan kaus kaki

30

Pertanyaannya sederhana, tetapi jawabannya tidak:

ssh -D 8080 user@host

atau

ssh -gCNf -D 8080 user@host

atau

wathever with -D #

Saya memerlukan jenis proxy yang dapat saya gunakan dengan variabel http_proxy, di perangkat tertanam yang tidak mendukung SOCKS.

Apa yang harus saya lakukan?

behrooz
sumber
Bukankah seharusnya begitu ssh -D user@host:8080?
ngen
Saya telah melakukannya dengan ssh beberapa waktu lalu .. vnc melalui ssh. tetapi Anda bisa saya kira menggunakan squid (proxy http) melalui ssh. tidak dapat mengingat bagaimana saya melakukannya saat ini. itu bukan -D 'cos (seperti yang Anda tahu -dan lebih baik dari saya) -D adalah SOCKS jika saya ingat.
barlop
@ngen: Tidak. -DMenentukan port untuk membuka terowongan, bukan port yang akan dihubungkan. (Bahkan port koneksi ditentukan sebagai -p port, bukan :port, untuk alasan kompatibilitas.)
grawity

Jawaban:

33

Metode 1: Gunakan proxy HTTP yang mendukung penggunaan SOCKS hulu, misalnya Polipo atau Privoxy.

Pertama-tama buat sebuah -Dterowongan di atas SSH seperti biasa, kemudian konfigurasikan proxy HTTP untuk menggunakan terowongan SSH - contohnya konfigurasi Polipo:

proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "localhost:8080"
socksProxyType = socks5

Akhirnya, arahkan aplikasi ke Polipo menggunakan http_proxy=localhost:8118.

Metode 2: Jalankan program Anda di dalam torsocksbungkus (atau yang lebih tua tsocks), yang proksi semua koneksi secara transparan. Itu dimaksudkan untuk digunakan dengan Tor, tetapi bekerja dengan server SOCKS, termasuk ssh -D.

Metode 3: Siapkan proxy HTTP di server Anda , lalu gunakan ssh -Luntuk mengaksesnya.

grawity
sumber
Privoxy adalah solusi terbaik. Terima kasih banyak.
Seyed Morteza
18

Setiap -Dhasil menjadi server SOCKS. Jika klien Anda tidak dapat menangani SOCKS, lupakan -D.

Anda harus menjalankan HTTP-Proxy pada host jarak jauh dan meneruskan dengan -L:

ssh -f -N -n -L8080:127.0.0.1:8080 host
mencari
sumber
2
Agar proxy dapat berjalan, saya menemukan "tinyproxy" super sederhana dan sudah dikonfigurasi secara default. Pada host jarak jauh Ubuntu / etc, cukup "sudo apt-get install tinyproxy", dan kemudian teruskan ke port 8888 seperti di atas: "ssh -L8888: 127.0.0.1: 8888"
Jimbly
7

Saya memiliki masalah yang sama yang ingin menggunakan proxy HTTP melalui SSH. Karena banyak aplikasi hanya mendukung proxy HTTP, dan proxy HTTP mudah digunakan di lingkungan baris perintah.

Meskipun mencari beberapa halaman tetapi saya tidak dapat menemukan cara langsung (dapat dirantai dengan Polipo, Privoxy, atau tsocks) untuk melakukan ini ...

Setelah beberapa hari bekerja, saya menyelesaikan versi HTTP Proxy Golang sederhana melalui SSH. Jangan ragu untuk bermain dengannya: mallory .

Saat ini hanya mendukung kunci RSA (terletak di $ HOME / .ssh / id_rsa) dan otorisasi kata sandi.

hostadalah alamat server SSH, portadalah 22jika tidak diubah oleh admin Anda. Sisi server hanyalah teman lama kami sshddengan konfigurasi nol.

mallory -engine=ssh -remote=ssh://host:port

atau dengan nama pengguna user

mallory -engine=ssh -remote=ssh://user@host:port

atau dengan nama pengguna userdan kata sandi1234

mallory -engine=ssh -remote=ssh://user:1234@host:port

Setelah terhubung, proxy HTTP akan melayani di localhost: 1315.

justmao945
sumber
4
ssh -L 8080:localhost:12345 user@host

Ini akan membuka port 8080 pada mesin lokal, dan meneruskan semua data ke port 12345 di localhost, seperti yang terlihat dari mesin jarak jauh.

lesmana
sumber
2
Jangan lupa, Anda juga harus memiliki proxy HTTP yang berjalan di host jarak jauh. Penerusan port dengan sendirinya tidak akan membantu.
Jonathan
2

Jalankan Privoxy di host jarak jauh, lalu sambungkan melalui SSH ke Privoxy menggunakan -Lopsi:

-L [bind_address:] port: host: hostport
         Menentukan bahwa port yang diberikan pada host (klien) lokal harus
         diteruskan ke host dan port yang diberikan di sisi jarak jauh. Ini
         bekerja dengan mengalokasikan soket untuk mendengarkan port di sisi lokal,
         terikat opsional ke bind_address yang ditentukan. Setiap kali
         Jika koneksi dilakukan ke port ini, koneksi diteruskan
         saluran aman, dan koneksi dibuat untuk meng-host port
         hostport dari mesin jarak jauh.

( sumber halaman manual )

anonim
sumber
1

Anda juga dapat menggunakan pembuka botol (GPL)

Tambahkan berikut ini ke .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p
Aurelien
sumber
pembuka botol berjalan ssh melalui proxy http, bukan kebalikan yang diminta.
eMBee