Installation et utilisation de SSH

Article écrit Initialement par Cédric Lignier puis repris et wikisé par Arnaud Fontaine.

Pré-requis théorique

Qu'est-ce que le protocole ssh ?

Le protocole ssh (Secure SHell) est un protocole permettant à un client d'ouvrir une session interactive sur une machine distante (serveur) afin d'administrer cette machine ou de transférer des fichiers de manière sécurisée :

  • Les données circulant entre le client et le serveur sont chiffrées, ce qui garantit leur confidentialité (personne d'autre que le serveur ou le client ne peut lire les informations transitant sur le réseau).
  • Le client et le serveur s'authentifient mutuellement afin d'assurer que les deux machines qui communiquent sont bien celles que chacune des parties croit être. Il n'est donc plus possible pour un pirate d'usurper l'identité du client ou du serveur (spoofing).

Description

ssh est un protocole, c'est-à-dire une méthode standard permettant à des machines d'établir une communication sécurisée. A ce titre, il existe de nombreuses implémentations de clients et de serveurs ssh. Certaines sont payantes, d'autres sont gratuites ou libres. J'ai choisi OpenSSH qui est une implémentation libre très utilisée de SSH. Il existe également lsh.

Convention Dans la suite de cet article, nous considérons la configuration suivante : vous disposez d'un client que l'on nommera client (adresse IP : 192.168.0.1) et un serveur que vous souhaitez administrer à distance, nous appellerons ce dernier serveur (adresse IP : 192.168.0.2), tout simplement.

Installation

# apt-get install ssh

Une fois le paquet installé à la fois sur serveur et client, vous devez répondre aux questions suivantes:

apt-get install ssh
Nom du paquet Question Réponse à choisir
ssh Permettre seulement la version 2 du protocole ssh? Yes
ssh Voulez-vous que /usr/lib/ssh-keysign soit installé avec le bit SETUID activé ? Yes
ssh Voulez-vous utiliser le serveur sshd ? Yes

Configuration

Il n'y a rien de particulier à configurer. Les personnes intéressées pour en apprendre plus sur ssh peuvent lire les sections concernant l'utilisation plus avancée de ssh. Toutefois, voici un exemple de fichier de configuration de ssh commenté afin de bien en apprendre les différentes directives.

Utilisation

Pour se connecter à serveur :

$ ssh 192.168.0.2

Vous pouvez également utiliser la commande scp qui permet de copier des fichiers à distance en utilisant ssh. Voici un exemple de fichier “exemple.txt” que l'on copie sur serveur à partir de client :

$ scp ~/exemple.txt 192.168.0.2:

Désinstallation

# apt-get remove ssh

Utilisation plus avancée de ssh

Dans cet article, nous avons vu comment utiliser ssh de manière un peu plus avancée. Nous allons donc commencer par une courte partie sur la gestion des clés, puis nous verrons l'utilisation de ssh-agent, ainsi que la création de tunnels cryptés avec ssh.

Gestion des clés avec ssh

Nous générons dans un premier temps le trousseau de clés pour client en utilisateur toto. Un trousseau est constitué d'une clé privée et une clé publique. La clé publique sera celle que vous pourrez échanger avec n'importe qui tandis que la clé privée sera celle qui sera conservée par vous même et qui vous permettra de vous connecter aux serveurs qui disposent de votre clé publique mais qui utilisent cette méthode d'authentification par clé publique.

$ ssh-keygen -t dsa
Commande Question Réponse à choisir
ssh-keygen Enter file in which to save the key (home/toto.ssh/id_dsa) [ENTREE]
ssh-keygen Enter passphrase (empty for no passphrase): [PhrasePass]
ssh-keygen Enter same passphrase again: [PhrasePass]

Notez toutefois que PhrasePass devra être idéalement constituée de ponctuation, de nombres, d'espaces mais également de n'importe quel autre caractère. Copions finalement la clé publique, générée précédemment, sur serveur sous le compte “toto2” :

$ scp /home/toto/.ssh/id_dsa.pub [email protected]:.ssh/authorized_keys

  • Fichier authorized_keys ? Ce fichier présent sur serveur contient toutes les clés publiques des clients qui peuvent se connecter sur le compte “toto2”. Notez que si vous souhaitez permettre à d'autres utilisateurs de se connecter, il faudra procéder de même pour chaque compte et donc créer ce fichier dans chaque répertoire d'utilisateur.
  • Phrase de passe ? Vous vous demandez certainement en quoi cela diffère de la méthode précédente consistant à utiliser les comptes UNIX préexistants. L'avantage de cette méthode par échange de clés est de garantir une sécurité accrue. En effet, si vous n'autorisez que cette méthode pour l'authentification faite sur serveur ssh, client devra disposer à la fois de la clé privée mais aussi du mot de passe permettant en quelque sorte de déverrouiller celle-ci. De plus, seuls les clients dont la clé publique est sur le serveur pourront se connecter, ainsi cela empêche toute attaque par dictionnaire.

Utilisation de ssh-agent

ssh-agent est selon le manuel un programme qui conserve des clés privées utilisées pour l'authentification par clé publique. Cela va permettre d'éviter de taper plusieurs fois la phrase de passe en la mémorisant temporairement. On tape donc les commandes suivantes pour effectuer cette opération :

$ ssh-agent $SHELL
$ ssh-add

Tapez ensuite la phrase de passe de votre clé privée. Une fois que c'est fait, vous pouvez vous connecter à serveur sans avoir à taper votre phrase de passe, à partir de ce shell uniquement.

Création de tunnels cryptés

Maintenant que vous disposez d'un serveur ssh configuré avec votre trousseau de clés, nous allons décrire l'utilisation de ssh afin d'encapsuler un flux de communication non-crypté dans un tunnel ssh.

  • A quoi ça sert ? Un exemple d'application de cette méthode est la connexion Sans-Fil. Ainsi, grâce à ssh vous pouvez vous connecter à votre réseau Sans-Fil sans que personne d'autre ne puisse capturer vos mots de passe lorsque vous naviguez en utilisant des protocoles non sécurisés tels que “http” ou “ftp”.
  • Option AllowTcpForwarding ? N'oubliez pas d'activer cette option dans le fichier de configuration etc/ssh/sshd_config de serveur afin de pouvoir suivre la suite de cette section. Une fois cette option ajoutée, n'oubliez pas non plus de redémarrer votre serveur ssh :
# /etc/init.d/ssh restart

Nous allons ainsi crypter un flux HTTP. Habituellement, les serveurs web auxquels vous vous connectez utilisent le port “80” pour l'établissement de la connexion et le transfert d'informations. Vous disposez donc d'un compte sur serveur (remplacez simplement serveur dans l'exemple ci-dessous par l'adresse IP publique de celui-ci) et vous souhaitez vous connecter au site à partir de client.

$ ssh -L 1234:serveur:80 serveur

Ainsi, vous n'aurez plus qu'à configurer votre navigateur web favori pour vous connecter sur le port “1234” pour naviguer. Tout le trafic web sera désormais crypté.

C'est lent ? Il est important de noter que la navigation sur les sites web sera ralentie surtout si vous ne disposez pas d'une connexion rapide sur serveur. Cela est dû au fait que vous n'êtes pas connecté directement à Internet mais que vous passez par une machine supplémentaire qui a généralement un temps de réponse plus important. Il vaut mieux utiliser cette méthode si vous avez vraiment besoin de confidentialité.

Montage de système de fichiers par ssh

A l'image de NFS, vous pouvez également monter des systèmes de fichier distants en passant par ssh. Cela s'avère un peu plus compliqué que NFS car cela nécessite de compiler un module pour le noyau. Nous allons utiliser shfs pour réaliser cette tâche. Pour cela nous installons les utilitaires en espace utilisateur par la commande suivante :

# apt-get install shfs-utils

Méthode de compilation d'un noyau ? Je vous conseille fortement de lire la documentation expliquant la méthode de compilation d'un noyau à la sauce Debian. Je vais considérer dans la suite de cette article que vous avez suivi ce conseil.

Maintenant, nous devons compiler le module du noyau qui se nomme shfs. Si vous utilisez un noyau officiel de Debian alors il vous suffit de télécharger les en-têtes du noyau ainsi que les sources du noyau et du module :

# apt-get install shfs-source

Une fois ces paquets installés, vous devez décompacter les archives du noyau et du module qui se trouvent dans le répertoire /usr/src :

$ cd /usr/src
# tar xfj .tar.bz2
# tar xfj shfs.tar.bz2

Compilez le module :

$ cd /usr/src/
# make-kpkg --append-to-version=`uname -r | awk -F"-" '{print $2}'` --revision=`uname -r`-1 modules_image

Enfin installons ce module, à partir du répertoire dans lequel nous venons de compiler ce dernier :

# dpkg -i ../shfs-module-`uname -r`*.deb

Si vous n'utilisez pas un noyau Debian : Si vous avez compilé votre noyau par vos propres moyens, vous pouvez tout simplement vous rendre dans /usr/src, vous décompressez le module, puis vous le compilez comme indiqué ci-dessus.

Vous pouvez maintenant tenter de monter votre répertoire utilisateur par ssh sur serveur en tapant simplement :

# mkdir /mnt/shfs
# mount -t shfs 192.168.0.1:~/ /mnt/shfs/

Shfs n'est pas vraiment stable ! J'ai pu constater par moi même que shfs n'est pas vraiment stable, en effet il lui arrive de provoquer un Oops dans le noyau ou qu'une erreur d'entrée-sortie survienne lors de la lecture de répertoires ou de fichiers ; cependant, notez qu'avec un traducteur sous GNU/Hurd, cela n'aurait pas posé de problème :).

Conclusion

Dans cet article nous avons simplement abordé une partie de ce qu'il était possible de faire avec ce formidable SSH. J'espère que cet article vous aura donné envie de vous plonger dans les pages de manuel de SSH. Voici quelques pages de manuel intéressantes sur SSH :

$ man ssh
$ man sshd_config
$ man ssh-keygen
$ man ssh-agent
 
reseau/installation-et-utilisation-de-ssh.txt · Dernière modification: 11/12/2010 18:49 par orgrim