Comprendre OpenSSH


SSH ou Secure Shell est un outil permettant d'ouvrir un shell sur une machine distante et cela en toute sécurité.
Pour garantir cette sécurité, ssh utilise l'algorithme de chiffrement RSA, mais peut également en utiliser d'autres. Son fonctionnement est basé sur le principe de chiffrement asymétrique et utilise donc deux clés, l'une pour chiffrer et l'autre pour déchiffrer.
Pour plus d'informations concernant le chiffrement asymétrique, vous pouvez vous rendre sur la page concernant GnuPG.

Pour ce guide, nous allons utiliser OpenSSH qui est un ensemble d'outils ouvert et sous licence BSD utilisant le protocole ssh.

Installation :


Avant toute chose, nous avons besoin de trois paquets, le premier permettant de se connecter aux serveurs SSH, le second offre la possibilité de faire de votre machine un serveur et le troisième quant à lui permet de monter des disques ou répertoires distants :
# aptitude install openssh-client openssh-server sshfs
Bien entendu, si vous comptez utiliser OpenSSH uniquement en tant que client, il est inutile d'installer le paquet -server. Sshfs n'est pas indispensable non plus.


Configuration :


Il est préférable de configurer OpenSSH avant toute utilisation.

Nous allons interdire la connexion root en modifiant une ligne présente dans le fichier de configuration ajouté par le paquet openssh-server :
/etc/ssh/sshd_config
Modifiez le yes de la ligne PermitRootLogin par no.

Au sein de ce même fichier, vous pouvez ajouter une ligne permettant d'accorder l'accès à certains utilisateurs :
AllowUsers utilisateur1 utilisateur2 (par exemple)
Une fois les modifications effectuées, il est indispensable de relancer le service pour que ces changements soient pris en compte :
# /etc/init.d/ssh restart


Connexion à un serveur distant :


OpenSSH étant configuré et prêt à l'utilisation, nous pouvons nous connecter à un serveur distant. Il existe deux méthodes pour se connecter, l'une en spécifiant l'adresse IP de la machine distante et l'autre en indiquant son nom.
$ ssh votre_nom_d'utilisateur@adresse_ip_du_serveur

Ceci est la méthode la plus simple, en revanche, elle n'est pas la plus sûre... Il est largement préférable de se servir d'un système de clés RSA ou DSA.


Système de clés avec ssh-keygen :


Il est très simple de créer une paire de clés avec ssh-keygen :
$ ssh-keygen -t rsa -b 1024 -f id_rsa
L'option paramétrée -t rsa permet de choisir un algorithme (ici RSA).

-b 1024 est la taille de la clé (nombre de bits), ici il est possible de choisir 512 ou encore 2048, cependant 1024 est un bon choix, car offre un bon compromis entre sécurité et consommation de ressources.

-f id_rsa est le fichier de sortie, le fichier clé.

Cette commande est donc à taper sur la machine cliente et renvoie :
$ ssh-keygen -t rsa -b 1024 -f id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub
The key fingerprint is:
45:68:85:3b:8v:3a:0f:5s:93:c9:45:01:0f:f3:de:31 utilisateur1@client
Vous devez donc indiquer une "passphrase". C'est une sorte de mot de passe, mais pouvant contenir plusieurs mots. ATTENTION : Notez bien cette clé en lieu sûr pour ne pas l'oublier.
On constate donc que deux fichiers sont générés ; id_rsa et id_rsa.pub. Il vous faut donc copier ces fichiers d'une manière ou d'une autre dans le répertoire ~/.ssh/ de la machine serveur.

Ensuite on va créer un fichier (toujours sur le serveur) authorized_keys dans lequel on va copier le contenu du fichier id_rsa.pub.
Serveur:~/.ssh$ cat id_rsa.pub >> authorized_keys
Serveur:~/.ssh$ chmod 400 authorized_keys
Il ne reste plus qu'à authentifier avec ssh-agent à partir du poste client bien entendu :
$ ssh-agent /bin/bash
$ ssh-add
Enter passphrase for /home/utilisateur1/.ssh/id_rsa:
Identity added: /home/utilisateur1/.ssh/id_rsa
Ainsi, il n'est plus nécessaire d'indiquer la passphrase lors de la connexion avec le serveur.


Répertoires :


Une fois connecté au serveur il est possible de faire un nombre conséquent d'opérations.

Vous pouvez par exemple monter un disque ou répertoire distant sur votre machine. Ainsi vous aurez donc l'impression que ce répertoire est réellement présent dans le système :
$ sshfs votre_nom_d'utilisateur@adresse_ip_du_serveur:/repertoire_distant /emplacement_local
Il existe une autre solution très simple et pratique pour ceux qui préfèrent l'environnement graphique à l'interpréteur de commandes. Celle-ci consiste à afficher le contenu d'un disque/dossier distant depuis un navigateur de fichier comme Konqueror ou Nautilus et tout ça sans rien monter.
Il suffit d'entrer ce qu'il faut dans la barre d'url de Nautilus:
$ ssh://votre_nom_d'utilisateur@adresse_ip_du_serveur
Avec Konqueror par contre, le principe est légèrement différent, le nom du protocole diffère :

barre_konqueror

Copie de fichiers :


Copier des fichiers du serveur au client (ou l'inverse) est une tâche très simple avec ssh.
Copie d'un fichier présent sur serveur distant vers notre machine :
$ scp nom_d'utilisateur@adresse_ip: /dossier_distant/fichier /dossier_de_destination/fichier
Même procédure pour copier un dossier :
$ scp -r /dossier_distant/ nom_d'utilisateur@adresse_ip: /dossier_de_destination/


Site officiel du projet OpenSSH