One place for hosting & domains

      connecter

      Comment utiliser SSH pour se connecter à un serveur distant


      Introduction

      L’un des outils essentiels à maîtriser en tant qu’administrateur système est le SSH.

      SSH, ou Secure Shell, est un protocole utilisé pour se connecter en toute sécurité à des systèmes distants. C’est le moyen le plus courant d’accéder à des serveurs Linux distants.

      Dans ce guide, nous verrons comment utiliser SSH pour se connecter à un système distant.

      Syntaxe de base

      Pour se connecter à un système distant utilisant SSH, nous utiliserons la commande ssh.  La forme la plus élémentaire de la commande est :

      Le remote_host dans cet exemple est l'adresse IP ou le nom de domaine auquel vous essayez de vous connecter.

      Cette commande suppose que votre nom d'utilisateur sur le système distant est le même que votre nom d'utilisateur sur votre système local.

      Si votre nom d'utilisateur est différent sur le système distant, vous pouvez le spécifier en utilisant cette syntaxe :

      • ssh remote_username@remote_host

      Une fois que vous vous êtes connecté au serveur, il peut vous être demandé de vérifier votre identité en fournissant un mot de passe. Plus tard, nous verrons comment générer des clés à utiliser à la place des mots de passe.

      Pour quitter la session ssh et revenir dans votre session shell locale, tapez :

      SSH fonctionne en connectant un programme client à un serveur ssh, appelé sshd.

      Dans la section précédente, ssh était le programme client. Le serveur ssh fonctionne déjà sur le remote_host que nous avons spécifié.

      Sur votre serveur, le sshd devrait déjà fonctionner. Si ce n'est pas le cas, vous devrez peut-être accéder à votre serveur via une console Web ou une console série locale.

      Le processus nécessaire pour démarrer un serveur ssh dépend de la distribution de Linux que vous utilisez.

      Sur Ubuntu, vous pouvez démarrer le serveur ssh en tapant :

      Cela devrait démarrer le serveur sshd et vous pourrez alors vous connecter à distance.

      Lorsque vous modifiez la configuration de SSH, vous modifiez les paramètres du serveur sshd.

      Dans Ubuntu, le fichier de configuration principal de sshd se trouve à /etc/ssh/sshd_config.

      Sauvegardez la version actuelle de ce fichier avant de l'éditer :

      • sudo cp /etc/ssh/sshd_config{,.bak}

      Ouvrez-le avec un éditeur de texte :

      • sudo nano /etc/ssh/sshd_config

      Il est préférable de laisser de côté la plupart des options de ce dossier. Cependant, il y en a quelques-uns que vous voudrez peut-être examiner :

      /etc/ssh/sshd_config

      Port 22
      

      La déclaration de port précise sur quel port le serveur sshd écoutera les connexions. Par défaut, il s'agit de 22. Vous devriez probablement ne pas toucher à ce paramètre, à moins que vous n'ayez des raisons spécifiques de faire autrement. Si vous **changez de port, nous vous montrerons comment vous connecter au nouveau port par la suite.

      /etc/ssh/sshd_config

      HostKey /etc/ssh/ssh_host_rsa_key
      HostKey /etc/ssh/ssh_host_dsa_key
      HostKey /etc/ssh/ssh_host_ecdsa_key
      

      Les déclarations de clés d'hôtes précisent où chercher les clés d'hôtes globales. Nous discuterons plus tard de ce qu'est une clé d'hôte.

      /etc/ssh/sshd_config

      SyslogFacility AUTH
      LogLevel INFO
      

      Ces deux éléments indiquent le niveau connexion qui devrait avoir lieu.

      Si vous avez des difficultés avec SSH, augmenter le nombre de connexions peut être un bon moyen de découvrir quel est le problème.

      /etc/ssh/sshd_config

      LoginGraceTime 120
      PermitRootLogin yes
      StrictModes yes
      

      Ces paramètres précisent certaines des informations de connexion.

      LoginGraceTime précise combien de secondes pour maintenir la connexion active sans se connecter avec succès.

      Il peut être judicieux de fixer ce temps juste un peu plus élevé que le temps qu'il vous faut pour vous connecter normalement.

      PermitRootLogin sélectionne si le root user est autorisé à se connecter.

      Dans la plupart des cas, il faut passer à no lorsque vous avez créé un compte d'utilisateur qui a accès à des privilèges élevés (via su ou sudo) et peut se connecter via ssh.

      strictModes est un garde de sécurité qui refusera une tentative de connexion si les fichiers d'authentification sont lisibles par tous.

      Cela permet d'éviter les tentatives de connexion lorsque les fichiers de configuration ne sont pas sécurisés.

      /etc/ssh/sshd_config

      X11Forwarding yes
      X11DisplayOffset 10
      

      Ces paramètres configurent une capacité appelée X11 Forwarding. Cela vous permet de visualiser l'environnement graphique (GUI) d'un système distant sur le système local.

      Cette option doit être activée sur le serveur et donnée avec le client SSH lors de la connexion avec l'option -X.

      Après avoir effectué vos modifications, enregistrez et fermez le fichier en tapant CTRL+X et Y, puis ENTER.

      Si vous avez modifié des paramètres dans /etc/ssh/sshd_config, veillez à recharger votre serveur sshd afin de mettre en œuvre vos modifications :

      • sudo systemctl reload ssh

      Vous devez tester vos changements de manière approfondie pour vous assurer qu'ils fonctionnent comme prévu.

      Il peut être judicieux d'avoir quelques séances actives lorsque vous effectuez des changements. Cela vous permettra de revenir sur la configuration si nécessaire.

      S'il est utile de pouvoir se connecter à un système à distance à l'aide de mots de passe, il est bien plus judicieux de mettre en place une authentification par clé.

      L'authentification par clé fonctionne en créant une paire de clés : une clé privée et une clé publique.

      La clé privée se trouve sur la machine du client et est sécurisée et gardée secrète.

      La clé publique peut être donnée à n'importe qui ou placée sur n'importe quel serveur auquel vous souhaitez accéder.

      Lorsque vous tentez de vous connecter à l'aide d'une paire de clés, le serveur utilise la clé publique pour créer un message pour l'ordinateur client qui ne peut être lu qu'avec la clé privée.

      L'ordinateur client renvoie alors la réponse appropriée au serveur et celui-ci saura que le client est légitime.

      Tout ce processus se fait automatiquement après l'installation des clés.

      Les clés SSH doivent être générées sur l'ordinateur duquel vous souhaitez vous connecter**. Il s'agit généralement de votre machine locale.

      Entrez ce qui suit dans la ligne de commande :

      Appuyez sur la touche Entrée pour accepter les valeurs par défaut. Vos clés seront créées à l'adresse ~/.ssh/id_rsa.pub et ~/.ssh/id_rsa.

      Passez dans le répertoire .ssh en tapant :

      Regardez les autorisations des fichiers :

      Output

      -rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

      Comme vous pouvez le voir, le fichier id_rsa est lisible et accessible en écriture uniquement au propriétaire.  C'est pour cela qu'il doit être gardé secret.

      Le fichier id_rsa.pub, cependant, peut être partagé et dispose de permissions appropriées pour cette activité.

      Si vous avez actuellement un accès par mot de passe à un serveur, vous pouvez y copier votre clé publique en émettant cette commande :

      Cela permettra de démarrer une session SSH. Après que vous ayez entré votre mot de passe, il copiera votre clé publique dans le fichier des clés autorisées du serveur, ce qui vous permettra de vous connecter sans mot de passe la prochaine fois.

      Options côté client

      Il existe un certain nombre d'indicateurs optionnels que vous pouvez sélectionner lorsque vous vous connectez via SSH.

      Certains d'entre eux peuvent être nécessaires pour correspondre aux paramètres de la configuration sshd de l'hôte distant.

      Par exemple, si vous avez changé le numéro de port dans votre sshd, vous devrez faire correspondre ce port côté client en tapant :

      • ssh -p port_number remote_host

      Si vous ne souhaitez exécuter qu'une seule commande sur un système distant, vous pouvez la spécifier après l'hôte comme cela :

      • ssh remote_host command_to_run

      Vous vous connecterez à la machine distante, vous vous authentifierez, et la commande sera exécutée.

      Comme nous l'avons déjà dit, si la transmission X11 est activée sur les deux ordinateurs, vous pouvez accéder à cette fonctionnalité en tapant :

      Si vous disposez des outils appropriés sur votre ordinateur, les programmes de l'environnement graphique que vous utilisez sur le système distant ouvriront désormais leur fenêtre sur votre système local.

      Désactiver l'authentification par mot de passe

      Si vous avez créé des clés SSH, vous pouvez renforcer la sécurité de votre serveur en désactivant l'authentification uniquement par mot de passe. En dehors de la console, la seule façon de se connecter à votre serveur est d'utiliser la clé privée qui se couple avec la clé publique que vous avez installée sur le serveur.

      Avertissement : Avant de procéder à cette étape, assurez-vous que vous avez installé une clé publique pour votre serveur. Sinon, vous serez bloqué à l'extérieur !

      En tant que root ou utilisateur avec des privilèges sudo, ouvrez le fichier de configuration sshd :

      • sudo nano /etc/ssh/sshd_config

      Localisez la ligne qui indique Password Authenticationet la décommenter en supprimant le premier #. Vous pouvez alors changer sa valeur à no :

      /etc/ssh/sshd_config

      PasswordAuthentication no
      

      Deux autres paramètres qui ne devraient pas avoir à être modifiés (à condition que vous n'ayez pas modifié ce fichier auparavant) sont PubkeyAuthentification et ChallengeResponseAuthentification. Elles sont définies par défaut et doivent se lire comme suit :

      /etc/ssh/sshd_config

      PubkeyAuthentication yes
      ChallengeResponseAuthentication no
      

      Après avoir effectué vos modifications, enregistrez et fermez le fichier.

      Vous pouvez maintenant recharger le démon SSH :

      • sudo systemctl reload ssh

      L'authentification par mot de passe devrait maintenant être désactivée, et votre serveur ne devrait être accessible que via l'authentification par clé SSH.

      Conclusion

      Apprendre à s'orienter au sein de SSH en vaut la peine, ne serait-ce que parce c'est un processus de routine.

      Au fur et à mesure que vous utiliserez les différentes options, vous découvrirez des fonctionnalités plus avancées qui peuvent vous faciliter la vie. SSH est resté populaire parce qu'il est sûr, léger et utile dans diverses situations.



      Source link

      Comment configurer Jupyter Notebook avec Python 3 sur Ubuntu 20.04 et se connecter via un tunnel SSH


      Introduction

      Jupyter Notebook est une application web open source qui vous permet de créer et de partager un code interactif, des visualisations, et plus encore. Cet outil peut être utilisé avec plusieurs langages de programmation, y compris Python, Julia, R, Haskell et Ruby. Il est souvent utilisé pour travailler avec des données, une modélisation statistique et l’apprentissage automatique.

      Les Jupyter Notebooks (ou simplement « Notebooks ») sont des documents produits par l’application Jupyter Notebook qui contiennent à la fois du code informatique et des éléments de texte riches (paragraphe, équations, figures, liens, etc.) permettant de présenter et de partager des recherches reproductibles. Ils peuvent donc être un excellent outil à utiliser pour les présentations basées sur les données ou la programmation, ou comme un outil d’enseignement.

      Ce tutoriel vous guidera dans la configuration de Jupyter Notebook pour qu’il s’exécute à partir d’un serveur Ubuntu 20.04, et vous montrera comment vous connecter et utiliser le notebook à partir d’une machine locale via un tunnel. À la fin de ce guide, vous serez en mesure d’exécuter du code Python 3 en utilisant Jupyter Notebook sur un serveur distant.

      Conditions préalables

      Afin de terminer ce guide, vous devez disposer d’une nouvelle instance de serveur Ubuntu 20.04 avec un pare-feu de base et un utilisateur non root avec des privilèges sudo configurés. Vous pouvez apprendre à paramétrer cette configuration en suivant notre tutoriel de configuration initiale du serveur.

      Étape 1 — Configuration de Python

      Pour commencer, nous allons installer les dépendances dont nous avons besoin pour notre environnement de programmation Python à partir des référentiels Ubuntu. Ubuntu 20.04 est préinstallé avec Python 3. Nous utiliserons le gestionnaire de paquets Python pip pour installer un peu plus tard des composants supplémentaires.

      Nous devons d’abord mettre à jour l’index local du paquet apt et ensuite télécharger et installer les paquets :

      Ensuite, installez pip et les fichiers d’en-tête Python, qui sont utilisés par certaines des dépendances de Jupyter :

      • sudo apt install python3-pip python3-dev

      Nous pouvons maintenant passer à la mise en place d’un environnement virtuel Python dans lequel nous allons installer Jupyter.

      Étape 2 — Création d’un environnement virtuel Python pour Jupyter

      Maintenant que nous avons Python 3, ses fichiers d’en-tête et pip prêts à l’emploi, nous pouvons créer un environnement virtuel Python pour gérer nos projets. Nous allons installer Jupyter dans cet environnement virtuel.

      Pour ce faire, nous devons d’abord accéder à la commande virtualenv, que nous pouvons installer avec pip.

      Mettez pip à niveau et installez le paquet en saisissant :

      • sudo -H pip3 install --upgrade pip
      • sudo -H pip3 install virtualenv

      L’indicateur -H garantit que la politique de sécurité fixe la variable d’environnement home dans le répertoire d’accueil de l’utilisateur cible.

      Une fois que virtualenv installé, nous pouvons commencer à créer notre environnement. Créez et accédez à un répertoire où nous pouvons conserver nos fichiers de projet. Nous appellerons cela my_project_dir, mais vous devez utiliser un nom qui soit significatif pour vous et pour ce sur quoi vous travaillez.

      • mkdir ~/my_project_dir
      • cd ~/my_project_dir

      Dans le répertoire du projet, nous allons créer un environnement virtuel Python. Pour les besoins de ce tutoriel, nous l’appellerons my_project_env, mais vous devez lui donner un nom qui soit pertinent pour votre projet.

      • virtualenv my_project_env

      Cela créera un répertoire appelé my_project_env dans votre répertoire my_project_dir. Dans ce répertoire, il installera une version locale de Python et une version locale de pip. Nous pouvons utiliser cela pour installer et configurer un environnement Python isolé pour Jupyter.

      Avant d’installer Jupyter, nous devons activer l’environnement virtuel. Vous pouvez le faire en saisissant :

      • source my_project_env/bin/activate

      Votre invite devrait changer pour indiquer que vous travaillez maintenant dans un environnement virtuel Python. Votre invite de commande indiquera alors quelque chose comme ceci : (my_project_env)user@host:~/my_project_dir$.

      À ce stade, vous êtes prêt à installer Jupyter dans cet environnement virtuel.

      Étape 3 — Installation de Jupyter

      Avec votre environnement virtuel actif, installez Jupyter avec l’instance locale de pip.

      Remarque : Lorsque l’environnement virtuel est activé (lorsque votre invite a (my_projet_env) qui la précède), utilisez pip au lieu de pip3, même si vous utilisez Python 3. La copie de l’environnement virtuel de l’outil est toujours appelée pip, quelle que soit la version de Python.

      À ce stade, vous avez installé avec succès tous les logiciels nécessaires pour exécuter Jupyter. Nous pouvons maintenant démarrer le serveur Notebook.

      Étape 4 — Exécution de Jupyter Notebook

      Vous disposez maintenant de tout ce dont vous avez besoin pour exécuter Jupyter Notebook ! Pour qu’il s’exécute, exécutez la commande suivante :

      Un journal des activités du Jupyter Notebook sera imprimé sur le terminal. Lorsque vous exécutez Jupyter Notebook, il tourne sur un numéro de port spécifique. Le premier Notebook que vous exécutez utilisera généralement le port 8888. Pour vérifier le numéro de port spécifique sur lequel tourne Jupyter Notebook, reportez-vous à la sortie de la commande utilisée pour le lancer :

      Output

      [I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret [I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir [I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at: [I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72 [I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser. [C 21:23:21.361 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72

      Si vous exécutez Jupyter Notebook sur un ordinateur local (et non sur un serveur), vous pouvez naviguer vers l’URL affichée pour vous connecter à Jupyter Notebook. Si vous exécutez Jupyter Notebook sur un serveur, vous devez vous connecter au serveur en utilisant un tunnel SSH comme indiqué dans la section suivante.

      À ce stade, vous pouvez garder la connexion SSH ouverte et laisser Jupyter Notebook fonctionner, ou vous pouvez quitter l’application et la relancer une fois que vous avez configuré le tunnel SSH. Choisissons d’arrêter le processus Jupyter Notebook. Nous le relancerons une fois que le tunnel SSH sera mis en place. Pour arrêter le processus Jupyter Notebook, appuyez sur CTRL+C, saisissez Y, puis ENTER pour confirmer. La sortie suivante sera affichée :

      Output

      [C 21:28:28.512 NotebookApp] Shutdown confirmed [I 21:28:28.512 NotebookApp] Shutting down 0 kernels

      Nous allons maintenant configurer un tunnel SSH afin de pouvoir accéder au Notebook.

      Étape 5 — Connexion au serveur à l’aide du tunnel SSH

      Dans cette section, nous allons montrer comment vous connecter à l’interface web de Jupyter Notebook en utilisant un tunnel SSH. Comme Jupyter Notebook fonctionne sur un port spécifique du serveur (tel que :8888, :8889 etc.), le tunnel SSH vous permet de vous connecter au port du serveur en toute sécurité.

      Les deux sous-sections suivantes décrivent comment créer un tunnel SSH à partir de 1) un Mac ou Linux, ou 2) Windows. Veuillez vous référer à la sous-section correspondant à votre ordinateur local.

      Tunnel SSH avec un Mac ou Linux

      Si vous utilisez un ordinateur local Mac ou Linux, les étapes de création d’un tunnel SSH sont similaires à l’utilisation de SSH pour se connecter à votre serveur distant, à la différence qu’il y a des paramètres supplémentaires dans la commande ssh. Cette sous-section expliquera les paramètres supplémentaires nécessaires dans la commande ssh pour créer un tunnel avec succès.

      Le tunneling SSH peut être réalisé en exécutant la commande SSH suivante dans une nouvelle fenêtre de terminal local :

      • ssh -L 8888:localhost:8888 your_server_username@your_server_ip

      La commande ssh ouvre une connexion SSH, mais -L spécifie que le port donné sur l’hôte local (client) doit être transféré à l’hôte et au port donnés du côté distant (serveur). Cela signifie que tout ce qui tourne sur le deuxième numéro de port (par exemple 8888) sur le serveur apparaîtra sur le premier numéro de port (par exemple 8888) sur votre ordinateur local.

      Vous pouvez éventuellement changer le port 8888 pour un port de votre choix afin d’éviter d’utiliser un port déjà utilisé par un autre processus.

      server_username est votre nom d’utilisateur (par exemple sammy) sur le serveur que vous avez créé et your_server_ip est l’adresse IP de votre serveur.

      Par exemple, pour le nom d’utilisateur sammy et l’adresse du serveur 203.0.113.0, la commande serait :

      • ssh -L 8888:localhost:8888 sammy@203.0.113.0

      Si aucune erreur ne se produit après l’exécution de la commande ssh -L, vous pouvez passer dans votre environnement de programmation et exécuter Jupyter Notebook :

      Vous obtiendrez une sortie avec une URL. Depuis un navigateur web sur votre machine locale, ouvrez l’interface web de Jupyter Notebook avec l’URL qui commence par http://localhost:8888. Assurez-vous que le numéro du jeton est inclus, ou entrez la chaîne du numéro du jeton lorsque vous y êtes invité à http://localhost:8888.

      Tunnel SSH avec Windows et Putty

      Si vous utilisez Windows, vous pouvez créer un tunnel SSH en utilisant Putty.

      Tout d’abord, entrez l’URL du serveur ou l’adresse IP comme nom d’hôte, comme indiqué : :

      Définissez le nom d'hôte pour le tunnel SSH

      Ensuite, cliquez sur SSH en bas du volet de gauche pour développer le menu, puis cliquez sur Tunnels. Entrez le numéro de port local que vous souhaitez utiliser pour accéder à Jupyter sur votre machine locale. Choisissez 8000 ou plus pour éviter les ports utilisés par d’autres services, et définissez la destination comme localhost:8888:8888 est le numéro du port sur lequel tourne Jupyter Notebook.

      Cliquez maintenant sur le bouton Ajouter, et les ports devraient apparaître dans la liste des ports transférés :

      Liste des ports transférés

      Enfin, cliquez sur le bouton “Open” pour vous connecter au serveur via SSH et passer les ports souhaités par le tunnel. Naviguez vers http://localhost:8000 (ou tout port que vous avez choisi) dans un navigateur web pour vous connecter à Jupyter Notebook tournant sur le serveur. Assurez-vous que le numéro du jeton est inclus, ou entrez la chaîne du numéro du jeton lorsque vous y êtes invité à http://localhost:8000.

      Étape 6 — Utilisation de Jupyter Notebook

      Cette section passe en revue les principes fondamentaux de l’utilisation de Jupyter Notebook. Si Jupyter Notebook n’est pas en cours d’exécution, lancez-le avec la commande jupyter notebook.

      Vous devriez maintenant y être connecté à l’aide d’un navigateur web. Jupyter Notebook est un outil très puissant doté de nombreuses fonctionnalités. Cette section présente quelques fonctions de base pour vous permettre de commencer à utiliser le Notebook. Jupyter Notebook affichera tous les fichiers et dossiers du répertoire à partir duquel il est exécuté, donc lorsque vous travaillez sur un projet, assurez-vous de le démarrer à partir du répertoire du projet.

      Pour créer un nouveau fichier Notebook, sélectionnez New > Python 3 dans le menu déroulant en haut à droite :

      Créez un nouveau notebook Python 3

      Ceci ouvrira un Notebook. Nous pouvons maintenant exécuter du code Python dans la cellule ou changer la cellule pour markdown. Par exemple, changez la première cellule pour qu’elle accepte le Markdown en cliquant sur Cell > Cell Type > Markdown dans la barre de navigation supérieure. Nous pouvons maintenant écrire des notes en utilisant Markdown et même inclure des équations écrites en LaTeX en les plaçant entre les symboles $$. Par exemple, saisissez ce qui suit dans la cellule après l’avoir modifiée pour la Markdown :

      # First Equation
      
      Let us now implement the following equation:
      $$ y = x^2$$
      
      where $x = 2$
      

      Pour transformer le markdown en texte riche, appuyez sur les clés CTRL et ENTER. Vous devriez recevoir un résultat similaire à celui qui suit :

      résultats du markdown

      Vous pouvez utiliser les cellules Markdown pour prendre des notes et documenter votre code. Appliquons cette équation et imprimons le résultat. Cliquez sur la cellule du haut, ensuite appuyez simultanément sur les touches ALT et ENTER pour ajouter une cellule en dessous. Entrez le code suivant dans la nouvelle cellule.

      x = 2
      y = x**2
      print(y)
      

      Pour exécuter le code, appuyez sur CTRL+ENTER. Vous obtiendrez les résultats suivants :

      résultats de la première équation

      Vous avez maintenant la possibilité d’importer des modules et d’utiliser le Notebook comme vous le feriez avec tout autre environnement de développement Python !

      Conclusion

      Félicitations. Vous devriez maintenant être en mesure d’écrire du code Python reproductible et des notes dans Markdown en utilisant Jupyter Notebook. Pour obtenir une brève présentation de Jupyter Notebook à partir de l’interface, sélectionnez Help > User Interface Tour dans le menu de navigation du haut pour en savoir plus.

      Maintenant, vous pouvez commencer un projet d’analyse et de visualisation de données en lisant Analyse et visualisation de données avec pandas et Jupyter Notebook en Python 3.



      Source link