web-dev-qa-db-fra.com

SSH Reverse chaussettes tunnel

ssh -D peut créer un port de chaussettes sur la machine locale, qui transfère le trafic à la télécommande, puis à d'autres endroits.

ssh -L port:Host:hostport, écoutez le port sur la machine locale, transmettez le trafic à "Host: hostport" du point de vue de la machine distante.

ssh -R port:Host:hostport est la contrepartie de ssh -L, qui écoute le port sur la machine distante et transmet le trafic à "Host: hostport" du point de vue de la machine locale.

Mais quelle est la contrepartie de ssh -D, c’est-à-dire, comment ouvrir un port de chaussettes sur une machine distante, qui transmettra le trafic au local, puis à d’autres endroits?

23
Berry

Avec -D & -L, vous avez un moyen de communiquer entre les deux machines.

Alors...

  • À partir de la machine locale, utilisez -R pour créer un port d'écoute sur la machine distante pointée sur la sshd de la machine locale.
  • Utilisez -D sur la machine distante, dirigée vers le port que vous avez créé ci-dessus.

Je "pense" en remplissant ce qui suit le fera fonctionner ...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

'remotehost', 'remoteport' & 'localport' dans ce qui précède doivent être changés. Un proxy de chaussettes sera formé sur 9050.

11
PriceChild

Peut être réalisé de manière transparente avec cet extrait de code dans ~/.ssh/config:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

Détails

Nous voulons un DynamicForward inverse. Ceci est réalisé en utilisant deux commandes ssh:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

De cette manière, la cible dispose d’un tunnel SOCKS vers le client SSH.

Ce que j'ai fait est d'utiliser la méthode classique de chaînage de ssh pour atteindre une cible distante via des hôtes intermédiaires afin que la création du tunnel SOCKS soit gérée de manière transparente lors de la connexion à la cible. La première astuce ProxyCommand + nc est obligatoire car -W implique ClearAllForwardings.

12
user305311

Il n’existe aucune possibilité de fournir un tunnel de chaussettes inversées avec OpenSSH. Vous devez donc exécuter la commande ssh fournissant le proxy socks sur la machine "distante".

Si la machine distante ne peut pas ssh dans la machine locale, créez d'abord une connexion ssh de local à distant qui transfère le port 22 à, par exemple. 2222. Ensuite, la machine distante peut ssh dans la machine locale sur le port 2222.

3
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

depuis OpenSSH 7.6

ssh (1): ajout du support pour le transfert dynamique inversé. Dans ce mode, ssh agira comme un proxy SOCKS4/5 et transmettra les connexions aux destinations demandées par le client SOCKS distant. Ce mode est demandé à l'aide de la syntaxe étendue pour les options -R et RemoteForward et, puisqu'il est mis en œuvre uniquement sur le client, il n'est pas nécessaire que le serveur soit mis à jour pour être pris en charge.

https://www.openssh.com/txt/release-7.6

0
zmx