http Proxy über SSH, nicht Socken


30

Die Frage ist einfach, aber die Antwort lautet nicht:

ssh -D 8080 user@host

oder

ssh -gCNf -D 8080 user@host

oder

wathever with -D #

Ich benötige eine Art Proxy, den ich mit http_proxy-Variablen in einem eingebetteten Gerät verwenden kann, das SOCKS nicht unterstützt.

Was sollte ich tun?


Sollte es nicht sein ssh -D user@host:8080?
ngen

Ich habe es vor einiger Zeit mit SSH gemacht. VNC durch SSH. aber du könntest vermutlich squid (einen http-proxy) über ssh verwenden. Ich kann mich nicht erinnern, wie ich es im Moment gemacht habe. es ist nicht -D 'cos (wie Sie wissen -und besser als ich) -D ist SOCKS, wenn ich mich erinnere.
Barlop

@ngen: Nein. Gibt -Deinen Port an, über den der Tunnel geöffnet werden soll, nicht den Port, mit dem eine Verbindung hergestellt werden soll. (Auch der Verbindungsport wird aus Kompatibilitätsgründen -p portnicht als angegeben :port.)
grawity

Antworten:


33

Methode 1: Verwenden Sie einen HTTP-Proxy, der die Verwendung eines SOCKS-Upstreams unterstützt, z. B. Polipo oder Privoxy.

-DStellen Sie zunächst wie immer einen Tunnel über SSH her und konfigurieren Sie dann den HTTP-Proxy für die Verwendung des SSH-Tunnels - Beispiel einer Polipo-Konfiguration:

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

Zum Schluss zeigen Sie die App mit auf Polipo http_proxy=localhost:8118.

Methode 2: Führen Sie Ihr Programm im torsocksWrapper (oder im älteren tsocks) aus, der alle Verbindungen transparent überträgt. Es war für die Verwendung mit Tor gedacht, funktioniert aber mit jedem SOCKS-Server, einschließlich ssh -D.

Methode 3: Stellen Sie einen HTTP - Proxy - up auf dem Server , dann verwenden , ssh -Ldarauf zuzugreifen.


Privoxy ist die beste Lösung. Vielen Dank.
Seyed Morteza

18

Jedes -DErgebnis wird zu einem SOCKS-Server. Wenn Ihr Client SOCKS nicht verarbeiten kann, vergessen Sie -D.

Sie müssen einen HTTP-Proxy auf dem Remote-Host ausführen und weiterleiten mit -L:

ssh -f -N -n -L8080:127.0.0.1:8080 host

2
Damit ein Proxy läuft, fand ich "tinyproxy" super einfach und standardmäßig schon einigermaßen konfiguriert. Auf einem Ubuntu / etc-Remotehost muss nur "sudo apt-get tinyproxy installieren" und dann wie oben beschrieben an Port 8888 weitergeleitet werden: "ssh -L8888: 127.0.0.1: 8888"
Jimbly

7

Ich habe das gleiche Problem, das HTTP-Proxy über SSH verwenden möchten. Da viele Anwendungen nur HTTP-Proxy unterstützen, kann HTTP-Proxy problemlos in der Befehlszeilenumgebung verwendet werden.

Obwohl mehrere Seiten durchsucht wurden, kann ich keinen direkten (mit Polipo, Privoxy oder tsocks verketteten) Weg finden, dies zu tun ...

Nach eintägiger Arbeit habe ich eine einfache Golang-Version von HTTP-Proxy über SSH fertiggestellt. Fühlen Sie sich frei, damit zu spielen: Mallory .

Derzeit werden nur der RSA-Schlüssel (befindet sich unter $ HOME / .ssh / id_rsa) und die Kennwortautorisierung unterstützt.

hostAdresse ist die SSH - Server, portist , 22wenn nicht von Ihrem Admin geändert. Die Serverseite ist nur unser alter Freund ohne sshdKonfiguration.

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

oder mit Benutzername user

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

oder mit Benutzername userund Passwort1234

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

Nachdem eine Verbindung hergestellt wurde, wird ein HTTP-Proxy auf localhost: 1315 bereitgestellt.


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

Dadurch wird Port 8080 auf dem lokalen Computer geöffnet und alle Daten werden an Port 12345 auf localhost weitergeleitet, wie dies vom Remotecomputer aus zu sehen ist.


2
Vergessen Sie nicht, dass auf dem Remote-Host auch ein HTTP-Proxy ausgeführt werden muss. Portweiterleitung allein hilft nicht.
Jonathan

2

Führen Sie Privoxy auf dem Remote-Host aus und stellen Sie dann mit der folgenden -LOption über SSH eine Verbindung zu Privoxy her :

-L [Bindeadresse:] Port: Host: Hostport
         Gibt an, dass der angegebene Port auf dem lokalen (Client-) Host sein soll
         an den angegebenen Host und Port auf der Remote-Seite weitergeleitet. Dies
         Funktioniert durch Zuweisen eines Sockets zum Abhören des Ports auf der lokalen Seite.
         Optional an die angegebene Bindeadresse gebunden. Wann immer ein
         Wird eine Verbindung zu diesem Port hergestellt, wird die Verbindung weitergeleitet
         der sichere Kanal und es wird eine Verbindung zum Host-Port hergestellt
         Hostport von der Remote-Maschine.

( Manpage-Quelle )


1

Sie können auch Korkenzieher (GPL) verwenden

Fügen Sie Folgendes zu Ihrem hinzu .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p

Der Korkenzieher führt ssh über einen http-Proxy aus, nicht umgekehrt.
eMBee
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.