Serwer proxy HTTP przez ssh, a nie skarpety

30

Pytanie jest proste, ale odpowiedź nie brzmi:

ssh -D 8080 user@host

lub

ssh -gCNf -D 8080 user@host

lub

wathever with -D #

Potrzebuję pewnego rodzaju serwera proxy, którego można używać ze zmienną http_proxy w urządzeniu osadzonym, które nie obsługuje SOCKS.

Co powinienem zrobić?

behrooz
źródło
Nie powinno tak być ssh -D user@host:8080?
ngen
Zrobiłem to z SSH jakiś czas temu .. VNC przez SSH. ale możesz przypuszczać, że używam squid (proxy HTTP) przez ssh. nie mogę sobie jednak przypomnieć, jak to zrobiłem. to nie jest -D, ponieważ (jak wiesz - i lepiej ode mnie) -D to SOCKS, jeśli pamiętam.
barlop
@ngen: Nie. -Dokreśla port do otwarcia tunelu, a nie port do połączenia. (Nawet port połączenia jest określony jako -p port, nie :portze względów kompatybilności.)
grawity

Odpowiedzi:

33

Metoda 1: Użyj serwera proxy HTTP, który obsługuje używanie SOCKS w górę, np. Polipo lub Privoxy.

Najpierw utwórz -Dtunel nad SSH jak zawsze, a następnie skonfiguruj proxy HTTP, aby korzystał z tunelu SSH - przykładowa konfiguracja Polipo:

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

Na koniec wskaż aplikację za pomocą Polipo http_proxy=localhost:8118.

Metoda 2: Uruchom swój program w torsocksopakowaniu (lub starszym tsocks), który transparentnie przekazuje wszystkie połączenia. Był przeznaczony do użytku z Torem, ale działa z dowolnym serwerem SOCKS, w tym ssh -D.

Metoda 3: Skonfiguruj serwer proxy HTTP na serwerze , a następnie użyj go, ssh -Laby uzyskać do niego dostęp.

grawitacja
źródło
Privoxy to najlepsze rozwiązanie. Wielkie dzięki.
Seyed Morteza
18

Każdy -Dwynik w serwerze SOCKS. Jeśli twój klient nie może obsłużyć SOCKS, zapomnij -D.

Musisz uruchomić serwer proxy HTTP na zdalnym hoście i przesłać dalej za pomocą -L:

ssh -f -N -n -L8080:127.0.0.1:8080 host
Ceving
źródło
2
Aby uruchomić proxy, uważam, że „tinyproxy” jest bardzo prosty i domyślnie skonfigurowany rozsądnie. Na zdalnym hoście Ubuntu / etc, po prostu „sudo apt-get install tinyproxy”, a następnie przekieruj do portu 8888 jak wyżej: „ssh -L8888: 127.0.0.1: 8888”
Jimbly
7

Mam ten sam problem, który chce korzystać z proxy HTTP za pośrednictwem SSH. Ponieważ wiele aplikacji obsługuje tylko proxy HTTP, a proxy HTTP można łatwo używać w środowisku wiersza poleceń.

Chociaż przeszukałem kilka stron, ale nie mogę znaleźć bezpośredniego (można połączyć łańcuchem z Polipo, Privoxy lub tsocks) sposobu na zrobienie tego ...

Po kilku dniach pracy ukończyłem prostą wersję serwera proxy HTTP firmy Golang za pośrednictwem SSH. Zapraszam do zabawy: mallory .

Obecnie obsługuje tylko klucz RSA (znajdujący się w $ HOME / .ssh / id_rsa) i autoryzację hasłem.

hostjest adres serwera SSH, portto 22jeśli nie zostanie zmieniona przez administratora. Po stronie serwera jest tylko nasz stary przyjaciel sshdz zerową konfiguracją.

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

lub z nazwą użytkownika user

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

lub z nazwą użytkownika useri hasłem1234

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

Po połączeniu serwer proxy HTTP będzie obsługiwał localhost: 1315.

justmao945
źródło
4
ssh -L 8080:localhost:12345 user@host

Spowoduje to otwarcie portu 8080 na komputerze lokalnym i przekazanie wszystkich danych do portu 12345 na komputerze lokalnym, jak widać z komputera zdalnego.

lesmana
źródło
2
Nie zapomnij, musisz także mieć serwer proxy HTTP działający na zdalnym hoście. Przekierowanie portów samo w sobie nie pomoże.
Jonathan
2

Uruchom Privoxy na zdalnym hoście, a następnie połącz przez SSH z Privoxy, używając -Lopcji:

-L [adres_powiązania:] port: host: port hosta
         Określa, że ​​dany port na hoście lokalnym (klienckim) ma być
         przekazane do danego hosta i portu po stronie zdalnej. To
         działa poprzez przydzielenie gniazda do nasłuchiwania portu po stronie lokalnej,
         opcjonalnie powiązany z określonym adresem bind_address. Ilekroć
         po podłączeniu do tego portu połączenie jest przekazywane
         bezpieczny kanał i połączenie z portem hosta
         port hosta ze zdalnego komputera.

( źródło strony )

anonimowy
źródło
1

Możesz także użyć korkociąg (GPL)

Dodaj następujące elementy do swojego .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p
aurelien
źródło
corkscrew uruchamia ssh przez proxy HTTP, a nie odwrotnie, o które jest proszony.
eMBee