http proxy über ssh, nicht socken

29517
behrooz

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 brauche eine Art Proxy, den ich mit der http_proxy-Variable verwenden kann, in einem eingebetteten Gerät, das keine SOCKS unterstützt.

Was soll ich machen?

27
Sollte es nicht `ssh -D user @ host: 8080` sein? ngen vor 12 Jahren 0
Ich habe es mit ssh vor einiger Zeit gemacht .. vnc durch ssh. Sie könnten aber auch 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 du weißt -und besser als ich) -D ist SOCKS, wenn ich mich erinnere. barlop vor 12 Jahren 0
@ngen: Nein. `-D` gibt einen Port zum Öffnen des Tunnels an, nicht den Port zum Herstellen einer Verbindung. (Sogar der * connection * -Port wird aus Kompatibilitätsgründen als "-p port" und nicht als ": port" angegeben.) grawity vor 12 Jahren 0

6 Antworten auf die Frage

31
grawity

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: Polipo-Konfiguration:

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

Richten Sie die App schließlich auf Polipo http_proxy=localhost:8118.

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

Methode 3: Richten Sie einen HTTP-Proxy auf Ihrem Server ein und verwenden Sie ihn, um ssh -Ldarauf zuzugreifen.

17
ceving

Jedes -DErgebnis in einem SOCKS-Server. Wenn Ihr Kunde mit SOCKS nicht umgehen kann, vergessen Sie nicht -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 
Für die Ausführung eines Proxys fand ich "tinyproxy" supereinfach und bereits standardmäßig vernünftig konfiguriert. Auf einem Ubuntu / etc-Remote-Host nur "sudo apt-get install tinyproxy" und dann wie oben beschrieben an Port 8888 weiterleiten: "ssh -L8888: 127.0.0.1: 8888" Jimbly vor 6 Jahren 2
6
justmao945

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

Ich habe zwar mehrere Seiten gesucht, finde aber keine direkte (kann mit Polipo, Privoxy oder TSocks verkettet werden), um dies zu tun ...

Nach ein paar Arbeitstagen habe ich eine einfache Golang-Version des HTTP-Proxys über SSH fertiggestellt. Fühlen Sie sich frei, damit zu spielen: Mallory .

Derzeit wird nur der RSA-Schlüssel (unter $ HOME / .ssh / id_rsa) und die Kennwortberechtigung unterstützt.

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

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 

Nach der Verbindung wird ein HTTP-Proxy auf localhost: 1315 bereitgestellt.

4
lesmana
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 vom Remote-Computer aus gesehen.

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

Führen Sie Privoxy auf dem Remote - Host, dann verbinden sich über SSH auf Privoxy mit der -LOption:

-L [Bindungsadresse:] Port: Host: Hostport Gibt an, dass der angegebene Port auf dem lokalen Host (Client) sein soll an den angegebenen Host und Port auf der Remote-Seite weitergeleitet. Diese Zuweisung eines Sockets zum Abhören des Ports auf der lokalen Seite, optional an die angegebene bind_address gebunden. Immer wenn ein Verbindung zu diesem Port hergestellt, wird die Verbindung weitergeleitet der sichere Kanal, und eine Verbindung zum Host-Port wird hergestellt Hostport von der Remote-Maschine. 

( Quelle der Manpage )

1
aurelien

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 
corkscrew führt ssh über einen http-Proxy aus, nicht das umgekehrte, was verlangt wird. eMBee vor 5 Jahren 0