18 | | |
19 | | |
20 | | Ce serveur web est écrit en Python, à la réception des requêtes du client, il exécute des scripts CGI (Common Gateway Interface) écrit également en Python pour produire des pages HTML dynamiques. Les scripts CGI devront communiquer avec le programme écrit en C contrôlant les LEDs. La communication entre les scripts et l'applic se fera par fifo UNIX. Le programme en C sera : soit la version permettant le contrôle depuis une application utilisateur (avec les droits de **root**), soit par une application utilisateur qui communique avec un driver. Je ne demande pas cette seconde possibilité parce que vous allez devoir insérer un module dans le noyau et c'est une difficulté supplémentaire qui n'apporte rien vis-à-vis de ce que vous allez voir aujourd'hui, mais je ne vous interdit pas de le faire. |
| 18 | == création du tunnel ssh == |
| 19 | |
| 20 | Je vais supposer que vous êtes sur une machine Unix (Linux ou MacOS). Je sais que certains d'entrevous sont sur Windows et ce que je vous demande de faire est possible, mais, en l'état, je ne sais pas le faire. Je pourrai essayer si nécessaire en utilisant une machine virtuelle et un Windows10. |
| 21 | |
| 22 | Sur le schéma ci-dessous : |
| 23 | * `localhost` : c'est votre machine chez vous |
| 24 | * `durian`: c'est la machine passerelle par laquelle vous devez passer pour entrer dans le réseau enseignement. |
| 25 | * `musicien`: c'est le nom d'une machine des salles 305-307, par exemple `mozart` |
| 26 | * 8022, 2280, 22 et 8000 : sont des ports d'écoute utilisés par le serveur ssh et le serveur HTTP. |
| 27 | |
| 28 | [[Image(htdocs:png/IOC6_tunnel-ssh.png,nolink,600px)]] |
| 29 | |
| 30 | 1. Commençons par renseigner durian de votre clé publique ssh, afin que vous n'ayez pas à taper votre mot de passe à chaque fois. Vous avez déjà fait ça pour l'accès aux !RaspberryPi 1. Ce sera à faire une seule fois. Sur votre PC chez vous: |
| 31 | {{{#!bash |
| 32 | ssh-keygen -t rsa |
| 33 | ssh-copy-id -i $HOME/.ssh/id_rsa.pub loginname@durian.lip6.fr |
| 34 | ssh loginname@durian.lip6.fr |
| 35 | }}} |
| 36 | * Remplacer `loginname` par votre nom de login. |
| 37 | * Pour la première commande, vous devez taper 3 fois sur la touche entrée pour choisir les valeurs par défaut. |
| 38 | * Pour la deuxième commande, vous tapez votre mot de passe d'accès à la passerelle (ce sera la dernière fois). |
| 39 | * La troisième est là pour vérifier que vous n'avez plus besoin du mot de passe. |
| 40 | |
| 41 | 2. Création des tunnels. Nous allons en créer deux pour traverser la passerelle. Malheureusement, ces opérations devront être réalisés à chaque fois.[[BR]]. |
| 42 | * Vous ouvrez deux terminaux sur votre machine locale. Sur le premier terminal, vous taper la commande suivante: |
| 43 | {{{#!bash |
| 44 | ssh loginname@durian.lip6.fr -L 2222:musicien:22 |
| 45 | }}} |
| 46 | Ainsi, vous vous connectez sur durian (vous n'avez pas à taper votre mot de passe si vous avez bien fait l'étape 1.) et vous configurez un tunnel sur `durian` dont l'entrée est `localhost:2222` et la sortie est `musicien:22`, c'est-à-dire que ce que vous envoyez sur le port 2222 depuis votre machine chez vous, arrive sur le port 22 de la machine `musicien`. Vous ne devez pas vous déloguer de Durian, sinon vous cassez le tunnel, par contre, vous pouvez aller sur la machine `musicien` depuis ce terminal (vous pouvez refaire le 1. parce que je crois ce n'est pas exactement le même compte).[[BR]]. |
| 47 | * Sur l'autre terminal, que vous n'aviez pas encore utilisé, vous tapez: |
| 48 | {{{#!bash |
| 49 | ssh -p 2280 localhost -L 8080:musicien:8000 |
| 50 | }}} |
| 51 | Vous faites un ssh sur `localhost` au port 8080 et grâce au premier tunnel, vos paquets vont être reçus par le serveur ssh de la machine `musicien` en passant à travers le proxy `durian`. Grâce à cette seconde commande, vous construisez un tunnel sur `musicien`, dont l'entrée est `localhost:8080` et la sortie est `musicien:8000`.[[BR]]. |
| 52 | * On aurait pu choisir d'autres numéros de port à la place de 2222 et 8080. J'ai choisi des numéros en rapport avec les numéros standard. Pour le port 8000, vous aurez peut-être à changer ce numéro, si vous êtes deux sur la même machine du réseau enseignement. |
| 53 | |
| 54 | |
| 55 | == Plan de la séance == |
| 56 | |
| 57 | Ce serveur web est écrit en Python, à la réception des requêtes du client, il exécute des scripts CGI (Common Gateway Interface) écrit également en Python pour produire des pages HTML dynamiques. Les scripts CGI devront communiquer avec le programme écrit en C contrôlant les LEDs. La communication entre les scripts et l'application se fera par fifo UNIX. Le programme en C sera : soit la version permettant le contrôle depuis une application utilisateur (avec les droits de **root**), soit par une application utilisateur qui communique avec un driver. Je ne demande pas cette seconde possibilité parce que vous allez devoir insérer un module dans le noyau et c'est une difficulté supplémentaire qui n'apporte rien vis-à-vis de ce que vous allez voir aujourd'hui, mais je ne vous interdis pas de le faire. |