proxy http sur ssh, pas des chaussettes

30

La question est simple, mais la réponse n'est pas:

ssh -D 8080 user@host

ou

ssh -gCNf -D 8080 user@host

ou

wathever with -D #

J'ai besoin d'une sorte de proxy que je peux utiliser avec la variable http_proxy, dans un appareil intégré qui ne prend pas en charge SOCKS.

Que devrais-je faire?

behrooz
la source
N'est-ce pas ssh -D user@host:8080?
ngen
je l'ai fait avec ssh il y a quelque temps .. vnc via ssh. mais vous pourriez, je suppose, utiliser squid (un proxy http) via ssh. ne me souviens pas comment je l'ai fait pour le moment. ce n'est pas -D 'cos (comme vous le savez -et mieux que moi) -D est SOCKS si je me souviens bien.
barlop
@ngen: Non. -Dspécifie un port pour ouvrir le tunnel, pas le port auquel se connecter. (Même le port de connexion est spécifié comme -p portnon :port, pour des raisons de compatibilité.)
grawity

Réponses:

33

Méthode 1: utilisez un proxy HTTP qui prend en charge l'utilisation d'un SOCKS en amont, par exemple Polipo ou Privoxy.

Commencez par établir un -Dtunnel sur SSH comme toujours, puis configurez le proxy HTTP pour utiliser le tunnel SSH - exemple de configuration Polipo:

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

Enfin, pointez l'application vers Polipo en utilisant http_proxy=localhost:8118.

Méthode 2: exécutez votre programme à l'intérieur de l' torsocksencapsuleur (ou de l'ancien tsocks), qui procède à toutes les connexions par proxy de manière transparente. Il était destiné à être utilisé avec Tor, mais fonctionne avec n'importe quel serveur SOCKS, y compris ssh -D.

Méthode 3: configurez un proxy HTTP sur votre serveur , puis utilisez ssh -Lpour y accéder.

grawity
la source
Privoxy est la meilleure solution. Merci beaucoup.
Seyed Morteza
18

Chaque -Drésultat dans un serveur SOCKS. Si votre client ne peut pas gérer les SOCKS, oubliez -D.

Vous devez exécuter un proxy HTTP sur l'hôte distant et transmettre avec -L:

ssh -f -N -n -L8080:127.0.0.1:8080 host
ceving
la source
2
Pour qu'un proxy fonctionne, j'ai trouvé "tinyproxy" super simple et déjà configuré raisonnablement par défaut. Sur l'hôte distant Ubuntu / etc, il suffit de "sudo apt-get install tinyproxy", puis de le transférer vers le port 8888 comme ci-dessus: "ssh -L8888: 127.0.0.1: 8888"
Jimbly
7

J'ai le même problème qui veut utiliser le proxy HTTP via SSH. Étant donné que de nombreuses applications ne prennent en charge que le proxy HTTP, le proxy HTTP est facile à utiliser dans l'environnement de ligne de commande.

Bien que recherché plusieurs pages mais je ne trouve pas de moyen direct (peut être enchaîné avec Polipo, Privoxy ou tsocks) de le faire ...

Après une journée de travail, j'ai terminé une version Golang simple du proxy HTTP sur SSH. N'hésitez pas à jouer avec: mallory .

Actuellement, ne prend en charge que la clé RSA (située dans $ HOME / .ssh / id_rsa) et l'autorisation de mot de passe.

hostest l'adresse du serveur SSH, portest 22si ne change pas par votre administrateur. Le côté serveur est juste notre vieil ami sshdavec une configuration nulle.

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

ou avec nom d'utilisateur user

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

ou avec nom d'utilisateur useret mot de passe1234

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

Une fois connecté, un proxy HTTP servira sur localhost: 1315.

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

Cela ouvrira le port 8080 sur la machine locale et transmettra toutes les données au port 12345 sur l'hôte local, comme vu depuis la machine distante.

lesmana
la source
2
N'oubliez pas, vous devez également avoir un proxy HTTP en cours d'exécution sur l'hôte distant. La redirection de port en elle-même n'aidera pas.
Jonathan
2

Exécutez Privoxy sur l'hôte distant, puis connectez-vous via SSH à Privoxy en utilisant l' -Loption:

-L [bind_address:] port: hôte: port hôte
         Spécifie que le port donné sur l'hôte local (client) doit être
         transmis à l'hôte et au port donnés du côté distant. Cette
         fonctionne en allouant un socket pour écouter le port du côté local,
         éventuellement lié à la bind_address spécifiée. Chaque fois qu'un
         connexion à ce port, la connexion est transmise via
         le canal sécurisé et une connexion est établie avec le port hôte
         port hôte de la machine distante.

( source de la page de manuel )

anonyme
la source
1

Vous pouvez également utiliser un tire-bouchon (GPL)

Ajoutez ce qui suit à votre .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p
aurelien
la source
corkscrew exécute ssh sur un proxy http, et non l'inverse qui est demandé.
eMBee