Dans la famille « les petits tracas du quotidien du sysadmin en vadrouille », je veux « la connexion SSH à mon serveur GNU/Linux préféré depuis Windows ». Le premier stagiaire venu vous lancera un condescendant « et Putty, c’est pour les ‘iench ? » (oui, le stagiaire moderne aime massacrer sa langue maternelle, l’air de rien). Seulement en bon paranoïaque que vous êtes, vous avez banni ce vieux duo grabataire qu’est l’identifiant/mot de passe au profit d’un séduisant couple de clés publique/privée DSA, on ne peut plus légitime s’il en est. Dans un élan de satisfaction non dissimulé, vous demandez alors au jeune impudent comment utiliser cette clé privée DSA dans Putty, la sempiternelle réponse « ch’ais pas c’est quoi » ne tardant évidemment pas à suivre. Le bougre se retrouve vulnérable, il n’y a plus qu’à l’achever d’un coup (bas) de RTFM. Il semble meurtri, à l’évidence il a subi ce Finish Him un grand nombre fois auparavant. Le grand pédagogue en vous le prend alors en pitié et tente de soigner à la fois son amour propre et son inculture manifeste.

Pré-requis :

  • GNU/Linux Debian 6 « Squeeze » pour la partie serveur
  • SSH avec authentification par clés DSA (voir ici pour un exemple)
  • Windows pour la partie cliente
  • Putty / Puttygen
  • Un stagiaire (optionnel)

Putty est donc un logiciel émulant un terminal de commande GNU/Linux depuis Windows. Il faut maintenant télécharger et installer les versions stables de Putty et Puttygen. Ce dernier permet de convertir la clé privée DSA, que vous aurez préalablement récupérée sur votre poste Windows, au format .ppk utilisable par Putty.

On lance donc Puttygen et on y importe la clé privée. Saisissez le mot de passe demandé si vous en avez ajouté un lors de la création des clés.

Il ne reste plus qu’à sauver la clé ainsi convertie sous le nom id_dsa.ppk par exemple.

Si vous êtes confronté au message d’erreur « Couldn’t load private key (ciphers other than DES-EDE3-CBC not supported », il faut utiliser la version de développement de Puttygen.

Il ne reste plus qu’à créer la session sous Putty et à y ajouter la clé .ppk dans le menu « Connection > SSH > Auth »

 

Mission accomplie, mais pour avoir l’esprit serein et vous assurer que votre stagiaire a tout bien compris, vous lui demandez de refaire la manipulation pour les 92 autres serveurs de l’entreprise. Quand il aura fini, afin de la vacciner contre le « ch’ais pas c’est quoi », il tâchera de vous expliciter les formules de la page Wikipedia concernant DSA. Tout ceci dans un soucis de pédagogie évidemment ;).

… Ou comment sentir poindre sur vous le regard réprobateur de vos amis lors d’une soirée, alors qu’en toute candeur vous abordiez ce fascinant sujet avec un confrère émérite, le « Vos discussions d’admins, ça commence à… » ne tardant jamais à suivre. Le fait est qu’en société, le profane ne goûte guère à vos échanges académiques en la matière. Encore que périodiquement, ils souhaitent connaître votre position sur le « NTLDR is missing, Operating System not found », un sujet qui curieusement semble les intéresser grandement.

Pré-requis :

  • GNU/Linux Debian 6 « Squeeze » dont les partitions sont chiffrées avec LUKS
  • SSH installé

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

Cet épineux problème, le montage partition chiffrée pas le NTLDR, survient quand on souhaite chiffrer son serveur GNU/Linux et pouvoir le redémarrer à distance via SSH. En effet, le mot de passe/clé privée est demandé avant le lancement du service SSH, un cas de Jörmungand informatique classique.

Après moultes recherches sur le sujet et divers essais infructueux, je suis tombé sur ce post de l’auteur du tutoriel pour Debian qui indiquait que cette problématique était prise en charge nativement par Debian depuis fin 2008.

On commence par installer Dropbear (un serveur/client SSH) et Busybox (un mini shell avec les commandes basiques). Initrd sera mis à jour lors de l’installation pour inclure ces logiciels.

# apt-get install dropbear busybox

Lors de l’installation de Dropbear, les clés publique /etc/initramfs-tools/root/.ssh/id_rsa.pub et privées /etc/initramfs-tools/root/.ssh/id_rsa sont générées. De plus, la clé publique est automatiquement ajoutée au fichier /etc/initramfs-tools/root/.ssh/authorized_keys.

On va donc récupérer la clé privée sur notre PC local afin l’utiliser pour l’authentification sur le serveur lors du démarrage de ce dernier :

# scp root@myserver:/etc/initramfs-tools/root/.ssh/id_rsa /home/user/

Il ne reste plus qu’à redémarrer le serveur Debian et lancer la commande suivante qui outre l’authentification SSH va déchiffrer le volume LUKS et par la suite monter la partition  :

# ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" -i "/home/user/id_rsa" root@myserver "echo -ne \"myLUKSpassword\" >/lib/cryptsetup/passfifo"

-o « UserKnownHostsFile=~/.ssh/known_hosts.initramfs » : utilise un autre fichier « known_hosts » car la clé publique du serveur SSH « classique » n’est pas identique à celle du serveur Dropbear, sans cette option, le client SSH interpréterait cette nouvelle clé comme une compromission du serveur et refuserait de s’y connecter.

-i « /home/user/id_rsa » : on utilise la clé privée générée lors de l’installation de Dropbear et qu’on a récupérer précédemment.

« echo -ne \ »myLUKSpassword\ » >/lib/cryptsetup/passfifo » : le mot de passe est envoyé dans fichier FIFO /lib/cryptsetup/passfifo ce qui permet le déchiffrage du volume.

Plusieurs remarques pour finir :

  • Si votre mot de passe LUKS contient des caractères exotiques qui peuvent être interprétés par bash pendant l’exécution de la commande SSH, il faut les précéder de \ ou  »  » ou ‘ ‘ afin de les « échapper ».  Le ! par exemple (Se transforme en PID de la commande (asynchrone) exécutée en arrière-plan le plus récemment dixit man bash) nécessite de désactiver l’interprétation de l’historique par la commande set +H avant d’entrer la commande SSH, set -H réactivera l’interprétation de l’historique.
  • Ce tutoriel n’a été validé que sur Debian 6, dans le principe il devrait fonctionner sur d’autres distributions. J’ai cependant vu plusieurs sujets indiquant des problèmes avec Ubuntu à cause notamment de l’utilisation de Plymouth.
  • Je n’ai pas vu de solution utilisant le mot de passe root afin de se connecter au serveur SSH Dropbear mais ça existe peut-être…

Sources :