Tunnels SSH
Le SSH, le Secure Shell, est un protocole standard qui chiffre les communications entre votre ordinateur et un serveur. Ce chiffrement permet d’empêcher que ces communications soient inspectées ou modifiées par les opérateurs réseau. SSH est utilisé en général pour sécuriser un grand nombre de types de communications, la connexion à un serveur ou les transferts de fichiers (scp ou SFTP).
SSH est particulièrement pratique pour contourner la censure car il fournit des tunnels chiffrés et fonctionne comme un client proxy classique. Les censeurs peuvent ne pas avoir envie de bloquer SSH complètement car il a de nombreuses utilisations que le contournement de la censure. Il est, par exemple, utilisé par les administrateurs système pour administrer leur serveurs sur Internet.
Utiliser SSH nécessite un compte sur un serveur, généralement un
serveur Unix ou Linux. Pour contourner la censure, ce serveur doit avoir
un accès non restreint à Internet, et, si possible, être géré par un
tiers de confiance. Certaines compagnies vendent également des comptes
sur leurs serveurs, et beaucoup de formules d’hébergement web proposent
un accès SSH. Une liste de comptes shells est disponible sur cette page :
http://www.google.com/Top/Computers/Internet/Access_Providers/Unix_Shell_Providers
On y trouve des comptes shells pour environ 2-10 dollars US par mois.
Un client SSH appelé OpenSSH est déjà installé sur la plupart des ordinateurs Unix, Linux, et Mac OS comme un programme en ligne de commande appelé par « ssh » dans un terminal. Pour Windows, vous pouvez également obtenir une implémentation libre de SSH appelée PuTTY.
Toute version récente de SSH supporte la création d’un proxy SOCKS qui permet à un navigateur et un large panel de logiciels d’utiliser la connexion SSH pour communiquer avec un Internet non filtré. Dans cet exemple, nous allons décrire uniquement cet usage de SSH. Les étapes ci-dessous mettent en place un proxy SOCKS sur le port 1080 de votre ordinateur.
Ligne de commande pour Linux/Unix et MacOs (Avec OpenSSH)
OpenSSH est disponible sur http://www.openssh.com mais est généralement préinstallé sur les ordinateurs Linux/Unix et MacOS.
La commande ssh que vous allez lancer contient un numéro de port local (typiquement, 1080), un nom de serveur, et un nom d’utilisateur. Elle ressemble à ça :
ssh -D numerodeportlocal nomdutilisateur@nomduserveur
Exemple :
On va vous demander votre mot de passe, puis vous serez connecté au serveur. En utilisant l’option -D, un proxy SOCKS local sera créé et existera tant que vous serez connecté. Important : vous devriez maintenant vérifier la clef de l’hôte et configurer vos applications, sinon vous n’utiliserez pas le tunnel que vous avez créé !
Interface graphique sous Windows (avec Putty
PuTTY est disponible sur : http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Vous pouvez sauvegarder le programme putty.exe sur votre disque dur pour une utilisation postérieure, ou le lancer directement depuis le site web, ce qui est souvent possible sur un ordinateur en accès libre, comme dans une bibliothèque ou un cybercafé.
Quand vous lancez PuTTY, un dialogue de configuration de la session apparaît. Commencez par entrer le nom de l’hôte (l’adresse) du serveur SSH auquel vous allez vous connecter (ici, example.com). Si vous connaissez uniquement l’adresse IP ou si un blocage DNS vous empêche d’utiliser le nom de l’hôte, vous pouvez utiliser l’adresse IP à la place. Si vous allez souvent utiliser cette configuration, vous pouvez créer un profil PuTTY qui sauvegardera ces options tout comme les options décrites ci-dessous afin qu’elles soient utilisées à chaque fois.
Dans la liste des catégories, choisissez « Connexion > SSH > Tunnels ».
Entrez 1080 comme port source, et cochez les cases Dynamique et IPv4.
Cliquez maintenant sur « Ajouter », puis sur « Ouvrir ». Une connexion s’établit avec le serveur, et une nouvelle fenêtre apparait, vous demandant votre nom d’utilisateur et mot de passe.
Entrez ces informations et vous serez connecté sur le serveur, et recevrez une ligne de commande. Le proxy SOCKS est alors établi. Important : vérifiez la clé de l’hôte et configurer vos applications, sinon vous n’utiliserez pas le tunnel que vous avez créé !
Vérification de la clé de l'hôte
La première fois que vous vous connectez à un serveur, on devrait vous demander de confirmer l’empreinte de la clef pour ce serveur. L’empreinte de la clef est une longue séquence de lettres et de chiffres (de l'hexadécimal) comme 57:ff:c9:60:10:17:67:bc:5c:00:85:37:20:95:36:dd qui identifie de manière sécurisée un serveur particulier. La vérification de cette empreinte est une mesure de sécurité qui permet de confirmer que vous communiquez bien avec le serveur avec lequel vous penser communiquer, et que la connexion chiffrée ne peut pas être interceptée.
SSH ne fournit pas de moyen de vérifier ça de manière automatique. Pour obtenir les bénéfices de ce mécanisme de sécurité, vérifiez la valeur de l’empreinte de la clef avec l’administrateur du serveur que vous utilisez, ou demander à un tiers de confiance de tenter de se connecter au même serveur pour voir s’il obtient la même empreinte.
La vérification des empreintes de clés est importante car elle permet de s’assurer que SSH protège le secret de vos conversations contre l’observation, mais elle n’est pas nécessaire si vous voulez uniquement contourner la censure et n’êtes pas concerné par le fait que les opérateurs réseaux puissent voir le contenu de vos communications.
Configurer les applications pour qu'elles utilisent le Proxy
Le proxy créé dans les étapes ci-dessus devrait fonctionner jusqu’à ce que vous fermiez le logiciel SSH. Si la connexion avec le serveur est interrompue, vous devrez répéter ces étapes pour réactiver le proxy.
Une fois que le proxy fonctionne, vous devez configurer vos logiciels pour l’utiliser. En suivant les étapes ci-dessus, le proxy sera un proxy SOCKS situé sur localhost, port 1080 (aussi appelé 127.0.0.1, port 1080). Vous devriez vous assurer que vos applications sont configurées pour éviter les fuites DNS, ce qui rendrait SSH moins efficace pour protéger vos données et contourner la censure.
Plus d'options
Jusqu’ici, toutes ces commandes affichent une ligne de commande sur la machine distante depuis laquelle vous pouvez exécuter n’importe laquelle des commandes disponibles sur cette machine. Exécuter une seule commande sur la machine distante, puis retourner à la ligne de commande de votre machine locale est possible : Placez la commande à faire exécuter par la machine distante entre simple quotes.
$ ssh utilisateurdistant@autremachine.domaine.org 'mkdir /home/utilisateurdistant/newdir'
Parfois vous aurez besoin d’exécuter des commandes qui prennent du temps sur la machine distante, mais vous n’êtes pas sûr d’avoir assez de temps pendant votre session actuelle. Si vous fermez la connexion distante avant la fin de l’exécution d’une commande, cette dernière sera abandonnée. Pour éviter de perdre votre travail, lancez via ssh une session screen distante, puis détachez-la et reconnectez-la quand vous voudrez. Pour détacher une session screen, fermez simplement la connexion distante : une session screen détachée continuera à s’exécuter sur la machine distante.
SSH fournit beaucoup d’autres options. Vous pouvez également configurer votre système favori pour vous permettre de vous connecter ou lancer des commandes sans préciser de mot de passe à chaque fois. L’installation est compliquée mais vous pouvez gagner beaucoup de temps de frappe. Essayez de faire quelques recherches sur "ssh-keygen", "ssh-add", et "authorized_keys".
SCP : Copie de fichiers
Le protocole SSH va bien au-delà de la commande ssh basique. Une commande particulièrement pratique basée sur le protocole SSH est scp, la copie de fichier sécurisée (secure copy command). L’exemple suivant copie un fichier depuis le dossier courant de votre machine locale vers le dossier /home/me/stuff sur une machine distante.
$ scp myprog.py me@autremachine.domaine.org:/home/me/stuff
Soyez prévenus que cette commande écrasera tout fichier déjà présent avec le nom /home/me/stuff/myprog.py. (Ou bien vous aurez un message d’erreur s’il y a déjà un fichier de ce nom et que vous n’avez pas les droits pour l’écraser) Si /home/me est votre dossier personnel, le dossier cible peut être abrégé.
$ scp myprog.py me@autremachine.domaine.org:stuff
Vous pouvez aussi facilement copier dans l’autre direction : depuis la machine distante vers votre machine locale.
$ scp me@autremachine.domaine.org:docs/interview.txt yesterday-interview.txt
Le fichier sur la machine distante est interview.txt dans le sous-dossier docs de votre dossier personnel. Le fichier sera copié vers yesterday-interview.txt dans le dossier personnel de votre système local.
scp peut être utilisé pour copier un fichier d’une machine distante à une autre.
$ scp utilisateur1@hote1:file1 utilisateur2@hote2:otherdir
Pour copier récursivement tous les fichiers et sous-dossiers d’un dossier, utilisez l’option -r.
$ scp -r utilisateur1@hote1:file1 utilisateur2@hote2:otherdir
Lisez la page de manuel de scp pour plus d’options.
RSYNC : Transferts et sauvegardes en masse automatisées
Rsync est une commande très pratique qui conserve un dossier distant synchronisé avec un dossier local. Elle est mentionnée ici car c’est une commande pratique pour faire du réseau, comme ssh, et parce que le protocole SSH est recommandé comme couche de transmission pour Rsync.
L’exemple ci-dessous est simple et pratique. Il copie les fichiers depuis votre dossier /home/myname/docs vers un dossier appelé backup/ dans votre dossier utilisateur sur le serveur quantum.example.edu. Rsync minimise les copies nécessaires à travers diverses vérifications compliquées.
$ rsync -e ssh -a /home/myname/docs me@quantum.example.edu:backup/
L’option -e de ssh utilise le protocole SSH pour la transmission, comme ce qui est recommandé. L’option -a (pour « archive ») copie tout ce qui est dans le dossier spécifié. Si vous voulez supprimer les fichiers du système local pendant qu’ils sont copiés, ajoutez l’option --delete.
Se simplifier la vie quand on utilise SSH souvent
Si vous utilisez SSH pour vous connecter à beaucoup de serveurs différents, vous allez souvent faire des erreurs en tapant de travers des noms d’utilisateurs ou même des noms de domaines (imaginez-vous en train de retenir 20 combinaisons différentes utilisateur/domaine). Heureusement, SSH permet de gérer facilement les sessions dans un fichier de configuration.
Le fichier de configuration est caché dans votre dossier personnel sous le dossier .ssh (le chemin complet est quelque chose comme /home/jsmith/.ssh/config - si le fichier n’existe pas vous pouvez le créer). Utilisez votre éditeur préféré pour ouvrir ce fichier et préciser les serveurs comme ceci :
Host dev
HostName example.com
User fc
Vous pouvez configurer ainsi plusieurs serveurs dans votre fichier de configuration, et après l’avoir sauvegardé, vous connecter au serveur appelé « dev » via la commande suivante :
$ ssh dev
Souvenez-vous, plus vous utilisez ces commandes, plus vous gagnez du temps.