2 votes

Logiciel pour proxyiser les connexions de socket à travers un lien de type TTY

Je recherche un logiciel qui peut effectuer la redirection distante des connexions socket à travers un lien de type TTY. J'ai deux machines, A et B. J'ai les privilèges administratifs sur A, mais pas sur B. Sur la machine B, je peux exécuter un logiciel serveur arbitraire qui ne nécessite pas de droits d'administration. La machine A n'a pas d'adresse IP publique, mais la machine B en a une. Je suis capable d'établir une connexion sortante de la machine A vers la machine B et de transférer des données arbitraires à travers celle-ci, mais ce dont j'ai besoin est un logiciel que je peux exécuter sur la machine B qui acceptera une connexion entrante, enverra les données de cette connexion à un processus s'exécutant sur la machine A, qui initiera ensuite une nouvelle connexion à un serveur s'exécutant sur la machine A.

Malheureusement, je ne peux pas utiliser ssh à cette fin car il a été configuré par l'administrateur de la machine B pour ne pas permettre la redirection. Autrement, exécuter ssh -R 4567:localhost:1234 machineb depuis la machine A accomplirait ce que je recherche.

Quelqu'un connaît une autre façon de faire cela? À titre de référence, la machine A fonctionne sous Ubuntu Linux et la machine B sous OpenBSD, bien que je préférerais une solution portable sur toutes les variantes unix.

3voto

Rich Points 1

Vous pouvez utiliser socat pour effectuer la tâche. Vous avez besoin de socat installé sur la machine A et de nc ( netcat) sur la machine B (socat fonctionnera également). Voici un exemple de comment gérer une connexion TCP (vous pouvez consulter la documentation de socat pour savoir comment gérer plusieurs connexions et personnaliser le comportement).

Vous devez exécuter sur la machine A :

  • Le service que vous souhaitez exposer à la machine B, disons un serveur web sur le port 8000 (vous pouvez le tester en exécutant python3 -m http.server ou python2 -m SimpleHTTPServer dans le répertoire où vous voulez exposer les fichiers) ;
  • socat pour rediriger entre STDIO et une connexion SSH vers B. Cette connexion SSH vers B exécutera nc en écoute sur un port spécifique.

Donc, exécutez dans une session de terminal sur la machine A :

python3 -m http.server

Et dans une autre session de terminal sur la machine A :

socat EXEC:'ssh user@machineb "nc -l -p 8888"' TCP4:localhost:8000

Si socat est également disponible sur la machine B, vous pouvez le remplacer par nc :

socat EXEC:'ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr"' TCP4:localhost:8000

Explication du concept : socat redirigera toute l'entrée standard/sortie standard de la commande ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr" vers une connexion cliente TCP sur localhost:8000 ( TCP4:localhost:8000). La commande exécutera la connexion SSH vers la machine B et exécutera socat là-bas, qui redirigera tout ce qui se connecte au port 8888 localement sur la machine B ( TCP-LISTEN:8888,reuseaddr) vers l'entrée standard/sortie standard ( STDIO).

Oui, socat est génial!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X