2 votes

Logiciel de proxy de connexions de socket à travers une liaison de type TTY

Je suis à la recherche d'un logiciel capable de transférer à distance des connexions de type socket sur une liaison de type TTY. J'ai deux machines, A et B. J'ai des privilèges d'administrateur sur A, mais pas sur B, mais sur la machine B je suis capable d'exécuter un logiciel serveur arbitraire qui ne nécessite pas d'administrateur. La machine A n'a pas d'adresse IP publique, mais la machine B en a une. Je suis en mesure de configurer une connexion sortante de la machine A vers la machine B et de transférer des données arbitraires à travers elle, mais ce dont j'ai besoin, c'est d'un logiciel que je puisse exécuter sur la machine B qui acceptera une connexion entrante, enverra les données de cette connexion à un processus fonctionnant sur la machine A, qui initiera ensuite une nouvelle connexion à un serveur fonctionnant sur la machine A.

Je ne peux malheureusement pas utiliser ssh à cette fin, car l'administrateur de la machine B l'a configuré pour ne pas autoriser le transfert. Sinon, en exécutant ssh -R 4567:localhost:1234 machineb de la machine A permettrait d'obtenir ce que je recherche.

Quelqu'un connaît-il un autre moyen de procéder ? Pour référence, la machine A tourne sous Ubuntu Linux et la machine B sous OpenBSD, bien que je préférerais une solution portable sur toutes les variantes d'Unix.

3voto

Rich Points 1

Vous pouvez utiliser socat pour faire le travail. Vous avez besoin socat installé sur la machine A et nc ( netcat ) sur la machine B ( socat fonctionnera également). Vous trouverez ci-dessous un exemple de la façon de traiter les fichiers une connexion TCP (vous pouvez lire socat pour savoir comment en gérer davantage et personnaliser le comportement).

Vous devez vous 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 la commande suivante python3 -m http.server o python2 -m SimpleHTTPServer dans n'importe quel 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 à l'écoute d'un port spécifique.

Donc, exécutez sur 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 remplacer nc avec elle :

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

Explication du concept : socat redirigera tout stdin/stdout de la commande ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr" à une connexion client TCP sur localhost:8000 ( TCP4:localhost:8000 ). La commande lancera la connexion SSH vers la machine B et exécutera socat qui redirigera tout ce qui se connecte au port 8888 localement sur la machine B ( TCP-LISTEN:8888,reuseaddr ) vers le stdin/stdout ( 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