Dans le présent article, nous apprendrons à lancer des programmes sur des machines distantes (StudSSH) sans devoir entrer de mot de passe.

A priori cela semble saugrenu, mais il n'en est rien, imaginez un script qui se connecte automatiquement à toutes les machines du département pour faire du machine learning, personne ne veut taper cent cinquante fois son mot de passe! Et pour la sécurité, on ne peut pas accepter que le mot de passe soit en clair dans le script de déployement. La solution passe par les connections par clés.

Tout d'abord, nous verrons comment se connecter via une clé. Ensuite, nous verrons comment faire pour qu'un script s'exécute lors de la connection avec cette clé.

Création de la clé

Voyons comment se connecter par clé plutôt que par mot de passe.
Tout d'abord, il faut créer une clé d'authentification:

Sur un PC d'une salle informatique, entrez la commande ssh-keygen

Pendant cette procédure, un passphrase est demandé, entrez ce que vous voulez, n'hésitez pas à faire un mot de passe compliqué, vous ne devrez de toute façon le tapper qu'une fois de temps en temps.

Suivez les instructions qui s'afficheront à l'écran. Le programme vous demande le chemin de création de votre clé (par défaut, elle sera stockée dans ~/.ssh/id_rsa.pub). Après avoir généré la clé, il faut la transmettre aux machines qui devront vous ouvrir leurs portes. Comme on a la chance de disposer de notre répertoire utilisateur sur toutes les machines UNIX du département, il ne faudra effectuer qu'une seule fois la copie: Sur le même PC de la salle informatique cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Ensuite, vous devez, **sur votre PC personnel**, copier cette clef dans le dossier ~/.ssh/ de votre ordinateur (utilisez pour réaliser cette opération une clef USB, un CD, une disquette, ...).

C'est bien joli, mais à quoi ça sert?

Désormais, depuis votre pc portable, vous pourrez vous connecter aux machines du département informatique à l'aide de la commande ssh LOGININGI@studssh.info.ucl.ac.be

Créer une clé pour une commande spécifique

Le problème avec ce que nous venons d'apprendre, c'est que n'importe qui peu faire n'importe quoi avec votre compte si votre terminal se retrouve seul face à l'ennemi!

Imaginons que vous vouliez vous connecter sur toutes les machines pour exécuter le terrible script zorglub.sh, il serait peut-être préférable de n'autoriser que ce script avec la clé sans mot de passe!

Pour cela, rien de plus simple, vous générez une clé comme avant. Vous ajoutez ensuite command="~/chemin/vers/votre/commande.sh" au tout début de la clé fraîchement créée (~/.ssh/id_dsa.pub). Le début de la clé ressemblera à command="~/chemin/vers/votre/commande.sh" ssh-dss[...].

Il ne reste plus qu'à copier le fichier vers la machine distante comme nous l'avons vu au premier point.

Quand vous voudrez faire exécuter ce script sur les machines distantes, le mot de passe ne sera plus demandé (si ssh-add a été fait)

Mise en garde

La connexion par clé vous permet d'automatiser des tâches et de demander beaucoup de travail aux serveurs distant. Utilisez les ressources avec parcimonie.