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?
Avec -D
& -L
, vous avez un moyen de communiquer entre les deux machines.
Alors...
-R
pour créer un port d'écoute sur la machine distante pointée sur la sshd de la machine locale.-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.
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
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.
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.
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.