Accéder à distance à son ordinateur sous Ubuntu depuis Windows via SSH

le 28/08/2011 dans Linux #Linux#réseau#ssh#Windows

Accéder à son ordinateur personnel ou son serveur (seul terme que nous utiliserons désormais pour désigner le poste distant) sous Ubuntu depuis un ordinateur sous Windows (le client) pour obtenir un shell peut s'avérer complexe. Pour ce faire, il nous faut installer et configurer sur notre serveur OpenSSH, « alternative Open Source à [SSH] développé[e] par l'équipe d'OpenBSD, dirigée par son fondateur, Theo de Raadt, et diffusé sous licence BSD. » (cf. Wikipédia), mettre en place l'authentification par clé et enfin configurer PuTTY sur le poste client.

Avant d'aller plus loin, il est nécessaire (à moins que vous n'ayez une IP fixe et encore) de s'être procuré un nom de domaine renvoyant au PC auquel l'on souhaite accéder, ce que je présente dans l'article DynDNS et ddclient : accéder à son ordinateur de n'importe où.

Préparation du serveur

Pour pouvoir accéder à votre ordinateur depuis un autre poste, il vous faut le «transformer» en serveur en installant la paquet openssh-server :

$ sudo aptitude install openssh-server

Sous Ubuntu, le serveur openssh se lance automatiquement. Nous allons cependant voir maintenant les commandes permettant respectivement de le lancer, le stopper ou le redémarrer :

$ sudo service ssh start
$ sudo service ssh stop
$ sudo service ssh restart

Pour les versions antérieures à 10.04, il faut utiliser, à la place de service, les commandes de ce type :

$ sudo /etc/init.d/ssh start

Si l'on en croit la documentation francophone d'Ubuntu francophone, la configuration d'openssh «est suffisante». Nous nous y intéresserons un petit peu tout de même par la suite.

Premier accès via SSH

Maintenant que notre serveur est prêt, il nous faut nous occuper du poste client sous Windows. Nous allons commencer par télécharger PuTTY (fichier putty.exe). Il n'est pas besoin de l'installer, il suffit de l'exécuter et vous devriez alors obtenir cette fenêtre :

putty 1

Il vous suffit de remplir le champ «Host Name» avec l'adresse obtenue auprès de DynDNS (cf. cet article) ou avec votre adresse IP si vous la connaissez et de cliquer sur le bouton «Open» ce qui devrait vous amener sur un shell vous demandant votre login :

putty 2

Vous devez saisir ici le login de votre session sur le serveur (votre ordinateur sous Ubuntu) et ensuite le mot de passe correspondant.

Si la connexion ne se fait pas, c'est qu'il vous faut ouvrir le port du routeur / de la box à laquelle est connecté votre serveur, ce que nous abordons dans notre article consacré au client Web de Transmission. D'ailleurs, je vous recommande de ne pas utiliser le port 22 utilisé par défaut (cf. cette discusssion).

Si vous ne parvenez pas à vous authentifier et que vous obtenez un message de ce genre

Permission denied (publickey).

il vous faudra alors éditer le fichier de configuration d'openssh :

$ sudo nano /etc/ssh/sshd_config

et passer à « yes » le paramètre « PasswordAuthentication » :

# Change to yes to enable tunnelled clear text passwords
PasswordAuthentication yes

et relancer le service (comme vu précédemment) :

$ sudo service ssh restart

Mise en place de l'authentification par clés privée/publique

Pour plus de sécurité, l'authentification peut se faire non pas grâce au mot de passe de la session du serveur mais par le biais d'un système de clé publique / clé privée.

Création du couple de clé sur le poste client

Pour générer le couple de clés, nous allons utiliser l'utilitaire PuTTYgen téléchargeable sur le site de PuTTY. Au lancement, PuTTYgen se présente ainsi :

puttygen 1

Il vous faut cliquer sur Generate pour lancer la création de clé et devez alors remuez votre souris dans la zone supérieure de la fenêtre (un message vous y invite). Une fois la clé générée, vous pouvez ajouter un commentaire à la clé (pour l'identifier plus facilement par la suite) et surtout entrer une « passphrase » ; si ce n'est pas nécessaire, le fait d'utiliser une passphrase est un plus en terme de sécurité.

puttygen 2

Enfin, vous sauvez la clé privée sur votre poste et laissez PuTTYgen ouvert.

« Envoi » de la clé publique sur le serveur

Pour que l'identification par clé publique / clé privée fonctionne, il faut que le serveur possède la clé publique afin de pouvoir chiffrer les messages. Il faut donc copier la clé publique dans le fichier ~/.ssh/authorized_keys.

Connectez-vous à votre serveur via PuTTY comme nous l'avons vu précédemment et lancez la commande :

$ nano ~/.ssh/authorized_keys

Copiez la clé publique dans PuTTYgen et collez-la dans le fichier ouvert dans PuTTY (Ctrl+Shift+v ou clic droit). Enregistrez le fichier avec Ctrl+o et quittez l'éditeur avec Ctrl+x. Quittez PuTTY avec la commande :

exit

Si vous ne parvenez pas à copier la clé de cette façon, nous allons dans un premier temps enregistrer la clé publique dans un fichier, puis l'envoyer soit sur un serveur FTP si nous en disposons et la récupérer ensuite sur notre serveur grâce au programme lftp soit en utilisant le logiciel WinSCP qui va nous permettre d'envoyer le fichier sur notre serveur via SSH. Je ne vais pas m'étendre sur l'utilisation de WinSCP puisqu'il est assez intuitif mais en voici deux captures :

winscp 1

winscp 2

Une fois le fichier de la clé publique transféré sur votre serveur, il nous faut en ajouter le contenu dans le fichier ~/.ssh/authorized_keys ce que la commande suivante nous permet de faire :

$ echo $(cat ~/FICIHER_CLE_PUBLIQUE) >> ~/.ssh/authorized_keys

Vérifiez tout de même le chemin du fichier de la clé publique téléchargée et adaptez la commande à votre besoin (le tilde correspond à /home/USER).

Connexion

Nous allons maintenant pouvoir nous connecter à notre serveur via SSH en utilisant cette méthode d'authentification. Ainsi dans PuTTY, après avoir renseigné l'hôte ainsi que le port à utiliser pour la connexion, il faut se rendre dans Connection > SSH > Auth et renseigner le chemin vers la clé privée :

putty 3

Vous pouvez lancer la connexion et après avoir saisi votre identifiant, il vous est demandé votre « passphrase », c'est-à-dire le mot de passe associé à votre clé privée et non votre mot de passe de cession :

putty 5

En cas de problème de connexion, je vous invite à regarder la documentation d'Ubuntu.

Configuration d'openssh

Nous pouvons maintenant modifier la configuration d'openssh pour empêcher les connexions sans authentification par clés, c'est-à-dire avec seulement identifiant et mot de passe de le session :

$ sudo nano /etc/ssh/sshd_config

Il nous faut modifier les paramètres « PasswordAuthentication » et « UsePAM » en les passant à « no » :

PasswordAuthentication no
UsePAM no

Pensez ensuite à relancer le service :

$ sudo service ssh restart

Problème(s)

Il se peut que vous rencontriez des problèmes d'encodage de caractères ; pour régler cela, il faut, dans PuTTY, aller dans Window > Translation et sélectionner UTF-8 :

putty 4