Lancer un serveur jupyter sur la machine distante
On veut lancer un serveur jupyter sur la machine distante et s’y connecter depuis la maison:
Ici on prend comme exemple de machine distante la machine: servjupyter.enst.fr (cela pourrait être tp-5d02-04.enst.fr par exemple)
Je suppose que vous avez déjà dans votre path sur les ordi de la DSI un anaconda, par exemple
/cal/softs/anaconda/anaconda3/bin
Configurer le serveur jupyter:
(à faire une fois pour toute) il faut que le fichier de configuration de jupyter ait les deux options suivantes:
c.NotebookApp.allow_origin = ‘*’
c.NotebookApp.ip = ‘0.0.0.0’ #’localhost’
Le fichier est $HOME/.jupyter/jupyter_notebook_config.py sur la machine. Créez-le s’il le faut.
Créez-vous un environnement conda qui convient à votre travail. On appelle cet environnement environ_a_moi.
Lancer le serveur:
(à faire à chaque fois que vous voulez lancer un serveur jupyter)
– se connecter à la machine servjupyter.enst.fr .
– faire
conda activate environ_a_moi
– lancer le serveur par
jupyter notebook –no-browser
(attention il y a un double – devant no-browser)
notez la ligne:
http://( servjupyter.enst.fr or 127.0.0.1):8888/?token=78cb5b9349c04a72772ba8392cbd78120243a7cb866302c7
et gardez ce terminal ouvert. (TERMINAL 1)
ATTENTION: C’est un grave risque de sécurité de laisser traîner ce token=78cb5b9349c04a72772ba8392cbd78120243a7cb866302c7
en conjonction avec le nom de la machine sur laquelle jupyter tourne.
si vous faites comme je dis il ne passera que dans des tunnels ssh et sera donc protégé.
SUR LA MACHINE LOCALE:
1) ssh -TNL 8888:servjupyter.enst.fr :8888 ssh.enst.fr
(cela crée un tunnel)
soyez patients car la machine ssh.enst.fr est très lente. tapez votre mot de passe si nécessaire.
2) Ouvrir un navigateur et entrez
http://localhost:8888/?token=78cb5b9349c04a72772ba8392cbd78120243a7cb866302c7
Et normalement vous êtes connectés et pouvez lancer autant de noyaux que vous voulez.
Quand vous aurez fini, n’oubliez pas de fermer le serveur qui tourne sur (TERMINAL 1) afin de libérer des ressources. Ainsi que fermer le tunnel.
Si la machine distante est à vous, vous pouvez laisser tourner le serveur mais n’oubliez pas de garder précieusement le token=78cb5b9349c04a72772ba8392cbd78120243a7cb866302c7 qui vous aura été donné.
Spyder avec un noyau distant
J’aime spyder et je deteste toute forme de codage dans un navigateur web (trop lent, pâteux, inconfortable). Je décris donc comment lancer un spyder sur la machine locale tout faisant les calculs sur la machine distante.
Lancer le noyau
À faire sur a machine de calcul:
ipython kernel
(Si vous voulez un environnement spécial faites d’abord le bon conda activate ou autre)
Cela va afficher plein de choses et se terminer par
–existing kernel-22929.json
copier le fichier kernel-22929.json vers la machine locale
(suivant les installations il peut être sous
/var/run/user/numero/jupyter
ou dans .local
Pour trouver le mieux est de chercher
cd
find . -name kernel-22929.json
vous dira si le fichier est dans votre home.
Une fois que vous aurez trouvé, il sera toujours dans le même répertoire.
pour le copier, faire depuis la machine locale:
scp pc:./.local/share/jupyter/runtime/kernel-23027.json /tmp/kpc.json
(notez que pc: signifie la machine distante)
Le fichier est mainteant sur la machine locale à la position /tmp/kpc.json.
Se connecter au noyau:
Dans spyder cliquer sur la roue en haut à droite de la partie interactive (console python) -> connecter à un noyau existant
Une fenêtre s’ouvre
entrez /tmp/kpc.json pour « information de connexion »
et cochez la case « Noyau distant »
Pour « Nom d’hôte » entrez simplement « pc » (magie du .ssh/config)
-> OK
Vous voilà avec une console python dont les calculs sont sur la machine de calcul . Très utile pendant le prototypage. Par contre il ne faut pas oublier que l’éditeur de texte de spyder édite des scripts locaux. Une fois un script prêt, il faudra le transférer vers la machine de calcul pour l’exécuter en ligne de commande par exemple.
L’informatique ne serait pas l’informatique si cette méthode vient de ne pas marcher chez moi, peut-être mon spyder est-il trop vieux… Bref la théorie est bonne. Suivant la version de spyder il faudra remplir différemment la fenêtre.
Seconde étape: réglage du fichier .ssh/config
Grâce à bon réglage de votre fichier .ssh/config vous pourrez faire quelque chose comme:
ssh pc
et arriver directement sur votre pc du travail sans taper son ip complète ou son nom.
À télécom nous avons le problème supplémentaire qu’on ne peut pas faire ssh directement vers les machines. Certains utilisent VPN pour circonvenir à cet inconvénient, mais je préfère faire un tunnel ssh.
Je vais supposer que votre machine de calcul s’appelle
powerfulmachine.enst.fr
Script tunnel:
Il faut créer un script qui nommé par exemple tunneltelecom et qui continent la ligne suivante:
ssh -N -TL 1234:powerfulmachine.enst.fr:22 enst &
attention le numéro 1234 est arbitraire, mais il doit simplement être plus grand (strictement?) que 1024 et inférieur à 65535 (je crois, en tout cas vous avez du choix. Il faudra réserver ce numéro à une machine et ne pas le réatribuer à une autre machine.
N’exécutez pas encore ce script.
.ssh/config
ajouter ces lignes à votre fichier .ssh/config (à créer si besoin)
host enst
hostname ssh.enst.fr
user login_DSI (par exemple mon login est ladjal)
host pc
hostname localhost
port 1234
user login_sur_machine_clacul (par exemple said)
Cela signifie que en faisant
ssh pc
vous allez vous connecter à la machine locale sur le port 1234, mais ça tombe bien le script tunneltelecom a connecté ce port (1234) au port 22 de votre machine de calcul.
Executez le script tunneltelecom
puis:
ssh pc
Et voilà.
Ca ne marche pas? Peut-être avez-vous oublié de rendre la machine ssh.enst.fr contrôlable avec votre clé (voir « Première étape »)
Première étape: la clé ssh
Création de la clé
La première étape pour accéder de manière fluide à une machine à distance est de disposer d’une clé ssh qui vous permettra d’exécuter des choses à distance sans besoin de taper votre mot de passe.
Une clé ssh est un couple à deux composantes: publique et privée.
La clé publique sert dans un ordinateur dont vous voulez prendre le contrôle. N’importe qui peut la voir, vous pouvez la publier sur une carte de visite si vous voulez.
La clé privée prouve votre identité. Si on vous la vole, on peut se faire passer pour vous. Elle doit être sur l’ordinateur maître, celui depuis lequel vous voulez contrôler la machine de calculs.
Si vous n’en avez pas, il faut en générer une avec:
ssh-keygen
(attention, si vous le laissez faire il va générer directement le couple dans $HOME/.ssh/id_rsa ce qui pourrait écraser une clé que vous utilisez déjà.)
Je vous suggère de laisser la passphrase vide.
Ce programme crée deux fichiers
id_rsa (clé privée)
id_rsa.pub (clé publique)
copier id_rsa vers $HOME/.ssh/identity
(vérifier que vous n’avez pas de tel fichier au préalable. Si vous avez un tel fichier, ce paragraphe est inutile, passez à utilisation de la clé)
copier id_rsa.pub vers $HOME/.ssh/id_rsa.pub (pour être sûr de la retrouver)
Utilisation de la clé
Sur la machine de calcul copier id_rsa.pub dans
$HOME/.ssh/authorized_keys
(si le fichier existe déjà vous pouvez faire
cat authorized_keys id_rsa.pub >newauthorized
mv newauthorized authorized_keys
c’est à dire juste ajouter la clé publique à celles déjà capables de prendre le contrôle de la machine de calcul.)
Maintenant, la machine locale (celle qui possède id_rsa) pourra prendre le contrôle de la machine de calcul
Faites de même pour rendre la machine ssh.enst.fr contrôlable par la machine locale.
————-ENGLISH (use at your own risks)
Creating the key
The first step to smoothly access a remote machine is to have an ssh key that will allow you to run things remotely without having to type your password.
An ssh key is a combination of two components: public and private.
The public key is used in a computer you want to take control of. Anyone can see it, you can publish it on a business card if you want.
The private key proves your identity. If someone steals it, they can pretend to be you. It must be on the master computer, the one you want to control the computing machine from.
If you don’t have one, you have to generate one with it:
ssh-keygen
(be careful, if you let it do this it will generate the couple directly in $HOME/.ssh/id_rsa which could overwrite a key you are already using).
I suggest you leave the passphrase empty.
This program creates two files
id_rsa (private key)
id_rsa.pub (public key)
copy id_rsa to $HOME/.ssh/identity
(check that you don’t have such a file beforehand. If you have such a file, this paragraph is useless, go to using the key)
copy id_rsa.pub to $HOME/.ssh/id_rsa.pub (to be sure to find it)
Using the key
On the calculation machine copy id_rsa.pub into
$HOME/.ssh/authorized_keys
(if the file already exists you can do
cat authorized_keys id_rsa.pub >newauthorized
mv newauthorized authorized_keys
i.e. just add the public key to those already able to take control of the computing machine).
Now, the local machine (the one that has id_rsa) will be able to take control of the computing machine.
Do the same to make the ssh.enst.fr machine controllable by the local machine.
Introduction
Ce petit site a pour but de vous aider dans la période actuelle à utiliser une machine à distance.
Il s’adresse surtout aux personnes qui codent chez elles tout en voulant accéder à la puissance de leur machine de bureau (par exemple avec une carte graphique)
—ENGLISH (use at your own risks)
This small site aims to help you in the current period to use a remote machine.
It is mainly aimed at people who code at home while wanting to access the power of their office machine (for example with a graphic card).