Installation d’un serveur SSH et première connexion

Progression :

Assez de théorie, passons à un peu de pratique ! Pour mieux vous faire comprendre ce que nous venons de voir, le plus rapide est encore de vous le faire utiliser.

Pour installer notre serveur SSH, nous allons utiliser une machine sous Linux, et plus précisément une Debian 8, je donnerais aussi quelques instructions particulières pour CentOS 7 afin de démarrer correctement. Notez que l'utilisation et la configuration d'SSH ne varie presque pas d'une distribution Linux à une autre.

Du côté client, car oui, pour SSH, il y un client, et un serveur, nous allons utiliser Windows dans un premier temps, et plus précisément le logiciel Putty. Nous utiliserons également le lien Linux en ligne de commande plus loin dans le cours.

Il s'agit ici d'une première utilisation, pas de panique si nous passons rapidement sur certaines notions, tout sera expliqué dans la suite du cours !

Il faut savoir que sur les distributions Linux (comme Debian ou CentOS pour citer les plus utilisées), OpenSSH est installé par défaut. Et oui, il fait partie des services basiques d'une distribution Linux.

SSH, OpenSSH ?

Cela mérite d'être précisé. Comme nous l'avons vu, SSH est à la fois un protocole et un ensemble d'application, plus précisément une commande "ssh" que nous allons utiliser bientôt. OpenSSH est quant à lui l'application qui jouera le rôle de serveur SSH. OpenSSH (qui signifie OpenBSD SSH) est un projet OpenSource présenté comme une alternative à la suite SSH Communications Security qui était en 1999 une version propriétaire de serveur SSH. Il faut donc retenir :

  • SSH : Le protocole Secure Shell

  • SSH (aussi) : La ligne de commande, utilisation du client "ssh" sous Linux

  • OpenSSH : L'application serveur SSH, à l'écoute des connexions entrantes sur un serveur Linux

I. OpenSSH est-il présent sur le serveur ?

Bien, voyons sur notre serveur Linux si OpenSSH est installé, ce qui est le cas normalement. Sous Debian, voici la commande à saisir :

apt-cache policy openssh-server

 Voici ce que le serveur renvoi :

check-installation-ssh-debian

Ici, nous pouvons voir "Installé : " puis une version, nous voyons alors que la version installée d'OpenSSH est la version 6.7 sur notre serveur, et qu'OpenSSH est bien installé.

Sous CentOS, nous pouvons effectuer la même opération de vérification avec la commande suivante :

yum list installed openssh-server

 Voici ce que l'on pourra voir si OpenSSH est déjà installé :

check-installation-ssh-centos03Une autre façon de vérifier l'installation d'OpenSSH aurait été de vérifier quel le fichier /etc/ssh/sshd_config est bien présent sur le système. Il s'agit du fichier de configuration du serveur SSH sur les distributions Linux :

ls -al /etc/ssh/sshd_config

 Si le serveur répond cela, c'est que la configuration est bien présente, et donc que le serveur est bien installé :

check-installation-ssh-centos02

II. Installer OpenSSH

Si ce n'est pas le cas, installons-le ! Sous Debian

  apt-get update
apt-get install openssh-server

Sous CentOS:

  yum update
yum install openssh-server

Voila, OpenSSH est maintenant présent sur votre machine Linux. Nous allons pouvoir jouer un peu avec !

III. Gestion basiques d'OpenSSH

Dans tous les cas, nous pourrons voir l'état du du service SSH avec la commande "systemctl", le serveur est-il en fonctionnement (actif, activé) ou non ? :

systemctl status sshd

Voici ce que l'on pourra voir si le serveur est effectivement déjà en route :

ssh-linux-01

Sinon, il suffira de le démarrer avec la commande suivante :

systemctl start sshd

 Par extension, pour arrêter le service il faudra utiliser la commande suivante :

systemctl stop sshd

 Et pour le redémarrer :

systemctl restart sshd

 Je ne l'ai pas encore mentionné, mais le service SSH écoute par défaut sur le port 22 en TCP. Nous pouvons alors voir, sur notre serveur Linux, que le service est bien en écoute sur ce port :

ss -lntp |grep "22"

 

Ici, la commande "ss" (anciennement connue sous le nom de "netstat") permet de visualiser l'état des ports et des connexions du serveur sous les systèmes Unix.

L'option "-l" permet de ne lister que les ports en écoute, l'option "-n" permet d'afficher les ports de manière numérique, et non leur translation habituelle (exemple "telnet" à la place de "23") et l'option "-t" permet de ne lister que les ports TCP, l'option "-p" permet enfin de lister les processus derrière chaque ports :

ssh-linux-02

Ici, on voit donc que le port 22 est bien écoute, en IPv4 ("*:22") et en IPv6 (":::22"). On voit également que c'est le processus "sshd" qui est derrière, aucun doute, il s'agit bien de notre serveur SSH.

IV. Première connexion client-serveur SSH

Après avoir brièvement vu la partie serveur, nous allons passer à la partie client et plus précisément l'établissement de notre première connexion SSH client-serveur !

A. Client SSH Windows

Très bien, passons maintenant au côté client. Nous ferons simples dans un premier temps et allons établir une connexion SSH sur un serveur Linux depuis un client Windows avec le logiciel "Putty", nous nous en servirons beaucoup durant ce cours, vous pourrez le télécharger sur la page suivante : http://www.putty.org/

Ici, cliquez sur le "here" de Download Putty. On arrive alors sur page avec des liens un peu partout. Je vous ai amené pour que vous voyez tous les "outils dérivés" de Putty qui ont chacun leur intérêt, nous en utiliseront quelques un durant ce cours. Les curieux pourront s'attarder sur cette page, en attendant, cliquez sur "putty.exe" pour télécharger Putty :

download-putty

Vous pourrez ensuite l'exécuter pour faire apparaître cette fenêtre :

putty-ssh-linux-01

Comme vous pouvez le voir, Putty peut être utilisé pour établir des connexion en SSH, mais également en Serial, Telnet, etc.. Concentrons-nous sur le SSH. On va donc saisir l'adresse IP ou le nom DNS de notre serveur SSH (notre serveur Linux, configuré précédemment) dans le champ "Host Name", on laisse le port 22 en port cible, celui-ci étant le port par défaut de SSH. On s'assure ensuite que SSH est coché dans "Connection type" puis on clique sur "Open" pour initialiser la connexion, ce petit message va alors apparaître :

putty-ssh-linux-02

Ce message nous avertit du fait que la clé du serveur SSH n'est pas "cached in the registry", c’est-à-dire enregistrée sur notre ordinateur. Cela signifie qu'il faut valider le téléchargement de la clé pour établir la connexion, c’est-à-dire accepter la clé. Nous détaillerons se processus de chiffrement et d'échange de clés un peu plus loin. Pour valider l'établissement de la connexion, cliquez sur "Oui".

On arrive alors sur un Shell, dans lequel vous pourrez vous authentifier avec les identifiants… de votre serveur Linux ! Et oui, vous êtes à présent connecté en SSH sur votre serveur Linux distant.

putty-ssh-linux-03

Plus clairement, au lieu de saisir des commandes sur le clavier de votre serveur et qu'il vous retourne cela au travers son écran, tout cela passe désormais par le réseau qui vous relit, qu'il soit local ou via Internet. Encore plus impressionnant, vous pouvez initier autant de connexion SSH que vous le souhaitez, vers un même serveur ou vers de multiples serveurs, il faut pour cela simplement lancer à nouveau Putty et spécifier la bonne IP comme nous l'avons fait plus haut.

Note : Depuis les dernières versions des OS CentOS et Debian, il est impossible de s'authentifier en root via SSH lorsqu'OpenSSH est configuré par défaut. Il s'agit là d'une mesure de sécurité dont nous parlerons plus tard. N'essayez donc pas de vous authentifier en tant que root, préféré donc un autre utilisateur présent sur votre système.

Le cas où le client est un OS Windows est le plus courant, mais on peut aussi très bien établir des connexions entre deux serveurs Linux ou plus précisément entre un client Linux et un serveur Linux. C'est ce que nous allons voir maintenant.

B. Client SSH Linux

Il faut ici bien comprendre un principe dans la notion de "Client - Serveur". Dans le cadre de SSH, un client peut devenir serveur et inverse. Mais pas de panique ! 😉

Si nous disposons de deux machines Linux, chacune peut avoir un service OpenSSH actif et en écoute. Ces deux machines sont alors des serveurs SSH. Néanmoins, je peux décider, avec ma machine Linux A, d'aller ouvrir une connexion SSH vers ma machine Linux B. Linux A est alors client, Linux B est alors serveur :

ssh-linux-03

Si, à l'inverse, depuis Linux B, je décide d'ouvrir une connexion SSH vers ma machine Linux A, c'est ma Linux B qui est le client SSH, Linux A est alors serveur.

Pour mieux comprendre cela, il est intéressant de constater que les applications servant le rôle de client SSH ou de serveur SSH peuvent être distinguées sous Linux :

man -k ssh

 On voit alors l'affichage suivant :

ssh-linux-04

La commande "man" permet d'afficher le manuel d'une commande, l'option "-k" permet d'afficher les commandes contenant un terme donné, ici "ssh". On avoir alors des commandes relatives à OpenSSH Server, et des commandes relatives à OpenSSH Client, on distingue alors mieux qu'il y a une différence entre client et serveur. Également, on peut utiliser (sous Debian), la commande suivante :

  apt-cache show openssh-client
apt-cache show openssh-server

On a alors le retour suivant :

ssh-linux-05

On voit ici également la distinction entre client et serveur. Openssh-client va être utilisé au travers la commande "ssh" pour initier une connexion SSH vers un serveur et "openssh-server" va être utilisé pour faire tourner le serveur SSH qui sera à l'écoute sur le port 22.

Passons à l'action, sur une machine Linux avec "openssh-client" d'installé, on va saisir la commande suivante :

ssh utilisateur@monserveur

Bien sûr, il faut que "utilisateur" soit remplacé par un utilisateur valide et que "monserveur" soit remplacé par le nom ou l'IP d'un serveur Linux ayant un OpenSSH à l'écoute. Si vous ne disposez que d'une machine et que celle-ci à justement un serveur OpenSSH à l'écoute, on peut initier une connexion SSH vers son propre serveur, cela à titre d’exemple seulement car ça ne présente aucun intérêt en situation opérationnelle :

ssh utilisateur@127.0.0.1

Ici, "127.0.0.1" est une IP de loopback (c'est le cas pour toutes les machines, tous les OS) qui veut dire "moi-même".

Dans les deux cas, vous aurez l'affichage même avertissement qu'avec le client Windows Putty :

ssh-linux-06

On saisit alors "yes" pour continuer puis on saisit le mot de passe de l'utilisateur sur la machine distante :

ssh-linux-07

La connexion est alors initialisée, vous pouvez voir sur la capture d'écran si dessus que le nom de ma machine (après le "@") et le nom d'utilisateur (avant le "@") sont différents avant et après le lancement de la commande "ssh". Cela car dans la ligne du haut (soulignée en bleu), je me situe sur mon client. Puis après le lancement de ma connexion au serveur, je me situe sur mon serveur SSH.

Je suis donc sur une connexion SSH sur mon serveur distant et peut travailler dessus.

Pour terminer une connexion SSH, on saisit "exit" on revient alors au terminal de notre machine :

ssh-linux-08

J'ai pris ici le contexte dans lequel les deux machines Linux avaient un OpenSSH actif, mais le client SSH sous Linux n'en a pas besoin. En effet, il peut très bien n'avoir que le logiciel client SSH pour initier une connexion en tant que client vers un serveur SSH. Il utilise alors la commande "ssh" qui vient du paquet "openssh-client"

V. Attention aux coupures !

Soyez prudent ! Il existe des cas où l'on se "coupe la patte" c’est-à-dire que l'on se coupe l'accès SSH ou réseau au serveur, pour dépanner ces cas, il faut alors retourner physiquement devant le serveur pour le rallumer ou le débugger. Parmi les manipulations, ou erreur, les plus courantes :

  • Éteindre le serveur distant depuis sa session SSH
  • Lancer un redémarrage serveur qui ne se passe pas correctement, empêchant ainsi le lancement de la connexion réseau ou du service SSH
  • Extinction du service SSH du serveur distant depui sa sessoin SSH
  • Coupure du port SSH à cause de la configuration d'un pare-feu
  • Erreur de configuration lors du changement du port d'écoute du service SSH
  • Coupure réseau dû à une mauvaise configuration

Les facteurs sont nombreux, il arrive parfois que l'on se coupe l'accès sans le vouloir, ce sont toujours des moments plus ou moins grave selon la cause, mais on arrive généralement à s'en sortir. Dans le pire des cas, un redémarrage serveur fait l'affaire. En effet, quand un service SSH est installé sur un système, celui démarre automatiquement au démarrage du système et initie donc l'écoute sur le port SSH.

Les grands hébergeurs proposent ainsi souvent une connexion directe au terminal de la machine et la possibilité de rebooter la machine via un bouton dans une interface web ;).

Note : Putty est l'outil le plus couramment utilisé, n'oubliez pas qu'il s'agit d'un logiciel client pour Windows et que d'autre logiciels existe comme Kitty ou TeraTerm

Dans ce module, nous avons ce qu'était SSH, les bases de son utilisation et de ses fonctions. Nous allons dans les prochains modules poursuive cet apprentissage pour aller plus loin dans l'utilisation de SSH. Dans le prochain module, nous allons entrer dans le vif du sujet en étudiant le fonctionnement et le déroulement d'une connexion SSH, nous aborderons les notions de chiffrement et de sécurité utilisé lors d'une connexion, ensuite, nous apprendrons à utiliser les différentes fonctions de SSH que nous avons vu plus haut comme le transfert de fichiers ou le X11 forwarding.


Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

    Mickael Dorigny

    Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

      mickael a publié 475 articles sur IT-Connect.See all posts by mickael