Contrôler son ordinateur à distance avec SSH
Sommaire :
Présentation de SSH
SSH est à la fois un programme informatique et un protocole de communication sécurisé. Il permet entre autres de contrôler très facilement un ordinateur à distance de manière sécurisée.
Le protocole de connexion impose l'échange de clé de chiffrement en début de connexion puis par la suite toutes les trames sont chiffrées, empêchant ainsi l'utilisation d'un sniffer. SSH a été conçu dans le but de remplacer telnet, rlogin et rsh.
Il existe différentes méthodes d'authentification plus ou moins sécurisées que nous détaillerons plus loin.
Le shéma typique d'une connexion via SSH est :
- Génération d'un "bi-clé asymétrique" (c'est à dire un couple clé-privée/clé-publique RSA ou DSA) sur une machine, en général la machine cliente (si on utilise plusieurs machines clientes, on effectue cette génération en général sur une seule d'entre elles, puis on recopie les clés sur les autres). Ce bi-clé est stocké dans un sous-répertoire (par exemple ~/.ssh avec OpenSSH) de l'utilisateur.
- Copie de la clé publique sur les machines serveur sur lesquelles on souhaite pouvoir utiliser cette authentification. Cela consiste à ajouter la ligne correspondant à la clé publique présente dans le répertoire où elle a été générée (par exemple, le contenu du fichier ~/.ssh/id_dsa.pub) dans un fichier du serveur situé dans le répertoire (par exemple ~/.ssh avec OpenSSH) de l'utilisateur : le nom de ce fichier dépend de la version de SSH, souvent authorized_keys ou authorization.
- Entrée de la "passphrase" au moment de le séquence de connexion. Afin d'automatiser l'entrée de la "passphrase", il est possible d'utiliser un utilitaire dont nous verrons l'utilisation plus loin dans ce tutoriel afin de ne la rentrée qu'une seule fois par session locale : ssh-agent.
Note :
- Ce tutoriel est orienté Unix pour la simple et bonne raison que la grande majorité des distributions actuelles intègrent cette outil par défaut (du moins dans sa version client).
Installation du serveur OpenSSH
Une implémentation libre de SSH est OpenSSH, si elle est souvent intégrée dans sa version client, il est plus rare qu'elle soit présente dans sa version serveur.
Nous allons donc l'installer, pour ce faire il faut généralement être root. Toutes les commandes suivantes (mit à part sur Ubuntu) se font donc dans un terminal (ou tty) en tant que root :
user@serveur:~$ su root
Ubuntu
Assurez vous d'avoir vos dépots bien configurés puis tapez dans un terminal :
user@serveur:~$ sudo apt-get update
user@serveur:~$ sudo apt-get install openssh-server
Fedora
Là aussi assurez vous d'avoir vos dépots bien configurés puis tapez dans un terminal :
root@serveur:~# yum update
root@serveur:~# yum install ssh-server
Mandriva
root@serveur:~# urpmi openssh
root@serveur:~# urpmi openssh-server
Authentification par mot de passe
Dans le cas d'un réseau local domestique, une authentification par mot de passe transitant en "clair" peut-être suffisante. Vous n'avez dans ce cas aucune configuration particulière à effectuée, le mot de passe demandé étant celui de l'utilisateur local de l'ordinateur distant (serveur). Toutefois, il peut être nécessaire de modifier le fichier de configuration "sshd_config” si vous rencontrez le problème suivant :
user@client:~$ ssh user@serveur
Permission denied (publickey).
Il faut alors modifier sur le serveur le fichier "sshd_config" (situé dans /etc/ssh/sshd_config) de la manière suivante :
# Change to yes to enable tunnelled clear text passwords
PasswordAuthentication yes
Authentification par clé publique
L' authentification par clé publique utilise le système de cryptographie asymétrique qui génère un couple clé-privée/clé-publique. On diffuse la clef publique à tous ceux avec qui on souhaite communiquer (ici le serveur). Lorsque quelqu'un veut communiquer avec nous, il chiffre les données avec la clef publique et on déchiffre ces données avec notre clef privé (qui doit rester secrète).
Une excellente analogie de Wikipédia :
"Alice a choisi un coffre-fort. Elle l'envoie ouvert à Bob (diffusion de la clef publique), et en garde la clé (privée). Lorsque Bob veut écrire à Alice, il y dépose son message, ferme le coffre (avec la clef publique), et le renvoie à Alice. À sa réception, seule Alice peut ouvrir le coffre, puisqu'elle seule en possède la clé (privée), à supposer le coffre inviolable, et que personne ne puisse retrouver la clé (privée toujours)."
Ce système offre de multiples avantages, notamment en matière d'identification ou de signature. Si vous voulez en savoir plus, je vous invite à consulter l'article de Wikipédia dédié à la cryptographie asymétrique (voir lien plus bas).
Passons maintenant à la pratique, selon la procédure décrite ci-dessus, on génère le couple de clef ssh sur le client :
user@client:~$ ssh-keygen -t dsa
Il vous est alors demandé où sauver la clé privée (acceptez juste le chemin par défaut) puis de choisir une passphrase. La passphrase est employée pour chiffrer votre clé privée. Toute personne qui obtiendrait l'accès à votre clé privée (non protégée) pourrait alors déchiffrer vos données. Prenez un instant et choisissez une très bonne passphrase.
Une fois cette étape terminée, on copie la clé publique sur le serveur :
user@client:~$ ssh-copy-id -i ~/.ssh/id_dsa.pub user@serveur
(Le mot de passe du compte présent sur le serveur vous est alors demandé).
Enfin on se connecte au serveur :
user@client:~$ ssh userduserveur@serveur
Il vous suffit alors de taper votre passphrase. Si celle-ci est correcte vous êtes alors connecté. Joie.
Utilisation
Etre connecté c'est bien, mais on fait quoi ensuite ?
Et bien vous pouvez utiliser tout le panel de commande disponible sur le shell distant comme si vous étiez en local. Par exemple, vous pouvez redémarrer l'ordinateur à distance ou bien éditer des fichiers de configuration.
SSH permet également la copie de fichier, la syntaxe étant la suivante :
Copier un fichier à partir d'un ordinateur sur un autre :
user@client:~$ scp /chemin/du/fichier/local/fichier.pouet user@serveur:/chemin/voulu/sur/le/serveur/fichier.pouet
Exemple :
tartopom@client:~$ scp /media/cdrom/fichier.txt tartopom@192.168.0.1:/home/tartopom/fichier.txt
Copier un fichier à partir d'un ordinateur à distance sur votre disque local :
user@client:~$ scp user@serveur:/chemin/sur/le/serveur/fichier.pouet /chemin/voulu/sur/le/client/fichier.pouet
Exemple :
tartopom@client:~$ scp tartopom@192.168.0.1:/home/tartopom/fichier.txt /media/floppy/fichier.txt
Copier un fichier d'un ordinateur à un autre tout en étant sur un troisième ordinateur :
user@neutre:~$ scp user@client:/chemin/du/fichier/sur/le/client/fichier.pouet user@serveur:/chemin/voulu/sur/le
/serveur/fichier.pouet
Exemple :
tartopom@neutre:~$ scp tartopom@192.168.0.2:/media/cdrom/fichier.txt tartopom@192.168.0.1:/home/tartopom
/fichier.txt
Astuces
SSH agent
Si vous devez souvent utiliser SSH, il peut être assez pénible de devoir retaper votre passphrase à chaque fois. Heureusement il y a SSH agent. Vous devez seulement entrer votre passphrase une fois en employant la commande ssh-add et SSH agent se rappellera de cette passphrase.
Il vous suffit seulement de donner votre passphrase à SSH agent :
user@client:~$ ssh-add
Tapez alors votre passphrase, la prochaine fois que vous utiliserez SSH, vous n'aurez pas besoin d'entrer à nouveau votre passphrase.
Important :
Vous devez verrouiller votre session pendant votre absence car d'autres personnes pourraient accéder aux ordinateurs distants à partir de votre machine sans avoir votre passphrase.
Liens utiles
- Article Wikipédia sur SSH
- Tutoriel SSH de Benjamin Pavie
- SSH sur Ubuntu
- Article Wikipédia sur la cryptographie asymétrique
Si vous avez des questions, critiques, conseils contactez-moi.