Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1157 connectés 

  FORUM HardWare.fr
  Systèmes & Réseaux Pro
  Réseaux

  Connection socket TCP sur serveur AWS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Connection socket TCP sur serveur AWS

n°175728
divide
Posté le 07-01-2022 à 11:32:46  profilanswer
 

J'ai ouvert un serveur AWS (une instance EC2 dédié au deep learning), j'arrive à me connecter dessus en SSH, à executer des commandes et à envoyer des fichiers via SFTP, mais je suis perplexe par rapport à la dernière brique qui me manque : les sockets TCP.
 
Mon but est d’exécuter des scripts Python sur ce serveur AWS et de les faire communiquer avec mon logiciel local via une socket TCP.
Quand tout est en local (logiciel+scripts) pas de problème, mon logiciel écoute sur le port 5000 (par exemple) et je dis à mon script de se connecter à localhost:5000.
 
Mais pour un script lancé à distance via SSH c'est moins clair pour moi.
J'ai cru comprendre qu'il fallait faire du port forwarding, mais je n'ai pas compris si je devait faire du local port forwarding ou du remote port forwarding, et je ne comprend pas quelles adresses je suis censé rentrer.
 
Apparemment la commande typique pour faire du local port forwarding ressemble à ça:

Code :
  1. ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER


Et du remote port forwarding à ça, mais si j'ai bien compris c'est à executer sur le remote:

Code :
  1. ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER


Si j'écoute en local sur le port 5000 et que j'autorise AWS à passer des sockets TCP via le port 3000, et que je veux que mes scripts AWS puissent se connecter sur mon serveur local, ça donne quoi concrètement comme commande ?

mood
Publicité
Posté le 07-01-2022 à 11:32:46  profilanswer
 

n°175729
Ivy gu
3 blobcats dans un trenchcoat
Posté le 07-01-2022 à 11:47:17  profilanswer
 

tu veux juste que deux machines qui portent deux composants de ton application puissent communiquer via le réseau ? Si c'est ça tu n'as pas besoin de SSH (et encore moins de forwarding).


---------------
Impressive, very nice. Let's see Paul Allen's card.
n°175732
divide
Posté le 07-01-2022 à 16:02:55  profilanswer
 

Alors effectivement au final j'ai pas eu besoin de faire ces histoires de forwarding pour etablir une connexion entre 2 scripts:
 
-un script serveur sur AWS qui écoute les connexions de toutes les IP possibles sur un port en particulier (5000).
-un script client lancé en local, qui se connecte à l'IP publique de mon instance AWS avec le port 5000.
 
Dans ce sens la connexion s'est établie sans problème.
 
Par contre si je veux faire dans l'autre sens, je suis à nouveau un peu paumé :
 
-je peux lancer un script serveur sur ma machine locale, qui écoute toutes les connexions de toutes les IP possibles sur le port 5000.
-...mais je ne sais pas vers quoi faire pointer mon script client lancé sur AWS : j'ai essayé sans succès mon IP publique internet, mais je suppose que ce n'est pas suffisant pour trouver le chemin entre ma freebox, mon routeur Wifi, et ma machine locale connectée au routeur wifi.


Message édité par divide le 07-01-2022 à 16:05:30
n°175736
Ivy gu
3 blobcats dans un trenchcoat
Posté le 07-01-2022 à 16:51:14  profilanswer
 

effectivement, il te faudra un port forwarding sur ton routeur internet (freebox) pour spécifier que toutes les connexions sur le port 5000 arrivant sur ton IP publique doivent être redirigées vers l'adresse IP privée de ta machine "cliente".
Attention en faisant ça il faut se souvenir que tu donnes l'accès à tout internet à ton application, potentiellement (ça vaut aussi pour ton service côté AWS si tu n'as pas mis d'ACL).


Message édité par Ivy gu le 07-01-2022 à 16:51:43

---------------
Impressive, very nice. Let's see Paul Allen's card.
n°175737
exeral
Posté le 07-01-2022 à 17:26:58  profilanswer
 

Local port forwarding:
ssh -L 8080:localhost:80 SERVER
 
le port 8080 sur ton client SSH (ton PC) est tunnélé via SSH vers le port 80 local de ton SERVER
localhost:8080 sur ton PC == localhost:80 sur ton SERVER
 
remote port forwarding:
ssh -R 8080:localhost:80 SERVER
 
le port 8080 sur le SERVER est tunnélé vers ton client SSH (ton PC) sur le port 80
localhost:8080 sur SERVER == localhost:80 PC
 
 
donc toi tu as besoin de:
 
ssh -R 5000:localhost:5000 ton-ec2-aws
ton script sur AWS doit pointer sur "localhost:5000" le tunnel SSH fait le reste

n°175742
divide
Posté le 08-01-2022 à 09:18:38  profilanswer
 

Merci, j'ai activé le remote port forwarding et effectivement ça marche !
 
Pour être clair, du coup je n'ai même pas besoin d'autoriser des ports supplémentaires sur mon instance EC2, les ports que je forward ou remote forward passent tous dans le tunnel du port SSH 22, pratique :)
 
Pour info, comme j'ai adopté une approche script Python (et pas commande bash), j'ai utilisé le package paramiko pour SSH/SFTP et ce script pour activer le port forward/remote port forward: https://github.com/skyleronken/sshr [...] tunnels.py
avec cette commande pour le remote port forward:

Code :
  1. Tunnel(ssh_client, ReverseTunnel, 'localhost', remote_port, 'localhost', local_port)


Et pour que mon instance EC2 puisse se connecter à mon serveur local, elle a juste à se connecter au port remote_port sur 'localhost', il n'y a plus à se préoccuper des connexions distantes.


Message édité par divide le 08-01-2022 à 09:22:28

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Systèmes & Réseaux Pro
  Réseaux

  Connection socket TCP sur serveur AWS

 

Sujets relatifs
Serveur TSEPiratage serveur : redirection 302
Serveur Windows 2016 Essentials qui s'arrête seulConseil petit serveur entreprise Topsolid / base de données SQL
Séparer serveur web et emailApplication accès serveur (Android)
acces nas sur serveur 2022Solution petite infra
Serveur Proliant[Aide] serveur proxy
Plus de sujets relatifs à : Connection socket TCP sur serveur AWS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR