Jean Zay : accès SSH et certificats

Dans le but de renforcer la sécurité lors des accès à Jean Zay, nous vous demandons de tester l'utilisation des certificats pour vos connexions SSH en lieu et place des paires de clés SSH habituelles (clé privée / clé publique).

Ce changement n'aura pas d'impact sur les connexions par mot de passe qui resteront toujours possible. Pendant la phase de test, les connexions via les clés SSH classiques restent possibles. La date d'arrêt du support des clés SSH classiques sera annoncée ultérieurement une fois tous les problèmes bloquants résolus.

Merci de nous signaler tous les problèmes que vous pourriez rencontrer avec l'utilisation des certificats qui ne sont pas mentionnés dans la liste des problèmes connus disponible plus bas.

Veuillez noter que les nœuds de pré/post-traitement de Jean Zay ne permettent pour l'instant pas l'authentification via les certificats SSH.

Nous détaillons ici les procédures à suivre pour définir vos certificats via l'outil IDRIS idr_keygen ainsi que leurs mises en œuvre pour les utiliser.

Notez que vous pouvez définir deux types de certificats :

  • l'un (valide 1 an) permettant tous types de connexions (interactives ou non, en particulier via la commande ssh) qui doit être protégé par une passphrase,
  • l'autre (valide 7 jours) permettant uniquement les transferts de fichiers (commandes scp, sftp, bbcp, bbftp et rsync) mais ne nécessitant pas de passphrase.

Attention, il existe des problèmes connus que nous sommes en train d'essayer de résoudre :

  • Les versions d'OpenSSH antérieures à la version 7.8 (publiée en août 2018) ne supportent pas les certificats SSH produits par idr_keygen.
  • Nos certificats ne semblent pas fonctionner sous macOS.
  • Sous Windows, les certificats SSH ne sont supportés qu'à partir de la version 0.78 de Putty (publiée en octobre 2022) et ne seront supportés qu'à partir de la version 6 de WinSCP (pas encore publiée).
  • Certains caractères diacritiques (tels que é, è, à, ç, …) posent problème :
    • si votre passphrase contient un caractère de type, votre certificat ne fonctionnera pas
    • si votre mot de passe Jean Zay contient un caractère de ce type, idr_keygen pourrait le refuser même s'il est correct.

L'outil idr_keygen

La commande IDRIS idr_keygen disponible sur Jean Zay, vous permet de générer les deux certificats en utilisant les options -t interactive ou -t transfert-only (ou leurs équivalents au format long --type ...) suivant le type de certificat désiré.
L'option -o OUTPUT (ou le format long --output OUTPUT) permet d'indiquer un nom de fichier (format zip) qui contiendra les composantes privée et publique du certificat généré.
La syntaxe de la commande est fournie par l'une des options -h ou --help :

$ idr_keygen --help
usage: idr_keygen [-h] [-t {interactive,transfert-only}] [-o OUTPUT] [-v]
 
Generates authentication keys for SSH that are signed by a Certification
Authority. The type of key to be generated is specified with the -t option. If
invoked without any arguments, idr_keygen will generate an RSA key for use in
SSH protocol 2 interactive connections.
 
optional arguments:
  -h, --help            show this help message and exit
  -t {interactive,transfert-only}, --type {interactive,transfert-only}
                        selects SSH certificate type:
                          interactive : for login sessions (ssh)
                          transfert-only : for data transferts (scp, sftp, bbcp, bbftp and rsync)
                         (default: interactive)
  -o OUTPUT, --output OUTPUT
                        ZIP Downloaded filename and location (default: /path/to/your/home/sshkey.zip)
  -v, --verbose         Increase verbosity output (default: False)

Certificat de type "interactive"

Pour vos connexions via la commande ssh, vous devez générer sur Jean Zay, un certificat de type interactive que vous devez protéger avec une passphrase. Ce certificat a une durée de validité de 365 jours et devra donc être renouvelé une fois par an. Il autorise également les connexions non-interactives.

Par exemple, pour générer un certificat de type interactive et l'enregistrer dans le fichier interactive_certif.zip (ici dans le HOME de Jean Zay), la commande à utiliser est :

$ idr_keygen -t interactive -o ~/interactive_certif.zip
Generating SSH signed key (type interactive will be used ; use help option -h to know more)
 
Please enter the certificate s passphrase:
Confirm the certificate s passphrase:
 
Request server to get your SSH certificate
Please enter login_idris s password:
Success. /path/to/your/home/interactive_certif.zip was successfully downloaded.

Notez que cette commande vous demande d'entrer une passphrase pour protéger le certificat ainsi que votre mot de passe sur Jean Zay pour s'assurer que c'est bien vous qui faites cette opération.

La passphrase doit être fournie une seconde fois pour confirmer la première entrée et doit respecter les règles de constitution suivantes :

  • Elle doit comporter un minimum de 20 caractères (pas de restriction sur le type de caractères à utiliser).
  • Et elle ne doit pas être composé de mots issus de dictionnaires, ni de combinaisons triviales (1234, azerty, …).

Pour tester une connexion SSH depuis votre machine locale sur Jean Zay via ce certificat, vous devez copier sur votre machine locale (celle depuis laquelle vous voulez atteindre Jean Zay) le certificat au format zip précédemment généré sur Jean Zay :

login_local@machine_locale:~$ scp login_idris@jean-zay.idris.fr:~/interactive_certif.zip ./. 
login_idris@jean-zay.idris.fr s password:
interactive_certif.zip                                100% ...

Puis vous devez le décompresser pour obtenir les composantes privée et publique du certificat qui doivent alors être enregistrées dans votre répertoire ~/.ssh de votre machine locale :

login_local@machine_locale:~$ unzip ~/interactive_certif.zip -d ~/.ssh
Archive: /path/to/your/home/interactive_certif.zip
inflating: /path/to/your/home/.ssh/id_ecc_pty
inflating: /path/to/your/home/.ssh/id_ecc_pty.pub

Notez que, contrairement aux clés SSH classiques, il n'est pas nécessaire d'ajouter la partie publique du certificat (fichier .pub) dans le fichier ~/.ssh/authorized_keys de Jean Zay.

Important : Si vous utilisiez déjà des clés SSH, pour vous assurez de réellement tester une connexion SSH sur Jean Zay via le certificat généré, vous devez renommer sur Jean Zay, votre fichier ~/.ssh/authorized_keys en ~/.ssh/authorized_keys.bk (par exemple) pour désactiver le support des clés SSH habituelles :

$ mv ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bk 

Vous pouvez alors établir depuis votre machine locale, une connexion ssh vers Jean Zay en utilisant l'identité correspondant à ce certificat (~/.ssh/id_ecc_pty pour cet exemple) via l'option -i de ssh :

login_local@machine_locale:~$ ssh -i ~/.ssh/id_ecc_pty login_idris@jean-zay.idris.fr 
Enter passphrase for key /path/to/your/home/.ssh/id_ecc_pty:
...
login_idris@jean-zay.idris.fr:~$

Remarques :

  • Avec ce certificat, vous pouvez activer le transfert de l'affichage X11 (option -X de ssh) :
    login_local@machine_locale:~$ ssh -X -i ~/.ssh/id_ecc_pty login_idris@jean-zay.idris.fr 
    Enter passphrase for key /path/to/your/home/.ssh/id_ecc_pty:
    ...
    login_idris@jean-zay.idris.fr:~$
  • si vous n'utilisez pas le ssh-agent sur votre machine locale, la passphrase protégeant le certificat vous est demandée. Mais vous pouvez l'ajouter à votre ssh-agent sur votre machine locale pour ne pas avoir besoin de fournir la passphrase à chaque fois que vous utilisez ce certificat :
    login_local@machine_locale:~$ ssh-add ~/.ssh/id_ecc_pty 
    Enter passphrase for ~/.ssh/id_ecc_pty:
    Identity added: ~/.ssh/id_ecc_pty (~/.ssh/id_ecc_pty)
  • il est possible d'indiquer le certificat à utiliser dans votre fichier de configuration SSH (fichier ~/.ssh/config sur la machine utilisée pour la connexion) :
    Host jean-zay
        HostName jean-zay.idris.fr
        User <login_idris>
        CertificateFile /path/to/private/part/id_ecc_pty

Certificat de type "transfert-only"

Pour vos transferts de données, vous pouvez générer sur Jean Zay, un certificat de type transfert-only. Ce certificat ne nécessite pas de passphrase afin de faciliter un usage non-interactif. En contrepartie, il a une durée de validité limitée à 7 jours.

Par exemple, pour générer un certificat de type transfert-only et l'enregistrer dans le fichier transfert_certif.zip (ici dans le HOME de Jean Zay), la commande à utiliser est :

$ idr_keygen -t transfert-only -o ~/transfert_certif.zip
Generating SSH signed key (type transfert-only will be used ; use help option -h to know more)
 
Request server to get your SSH certificate
Please enter login_idris s password:
Success! /path/to/your/home/transfert_certif.zip was successfully downloaded.

Notez que cette commande ne vous demande pas d'entrer une passphrase puisque le certificat de type transfert-only ne requière pas d'être protégé. Mais votre mot de passe sur Jean Zay est demandé pour s'assurer que c'est bien vous qui faites cette opération.

Ensuite, vous devez copier sur votre machine locale (celle depuis laquelle vous voulez atteindre Jean Zay) le certificat au format zip précédemment généré sur Jean Zay :

login_local@machine_locale:~$ scp login_idris@jean-zay.idris.fr:~/transfert_certif.zip .
login_idris@jean-zay.idris.fr s password:
transfert_certif.zip                                  100% ...

Puis vous devez le décompresser pour obtenir les composantes privée et publique du certificat qui doivent alors être enregistrées dans votre répertoire ~/.ssh de votre machine locale :

login_local@machine_locale:~$ unzip ~/transfert_certif.zip -d ~/.ssh
Archive: /path/to/your/home/transfert_certif.zip
inflating: /path/to/your/home/.ssh/id_ecc_rsync
inflating: /path/to/your/home/.ssh/id_ecc_rsync.pub

Notez que, contrairement aux clés SSH classiques, il n'est pas nécessaire d'ajouter la partie publique du certificat (fichier .pub) dans le fichier ~/.ssh/authorized_keys de Jean Zay.

Important : Si vous utilisiez déjà des clés SSH, pour vous assurez de réellement tester une connexion SSH sur Jean Zay via le certificat généré, vous devez renommer sur Jean Zay, votre fichier ~/.ssh/authorized_keys en ~/.ssh/authorized_keys.bk pour désactiver le support des clés SSH habituelles :

$ mv ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bk 

Vous pouvez alors réaliser des échanges de données entre votre machine locale et Jean Zay en utilisant l'identité correspondant à ce certificat (~/.ssh/id_ecc_rsync pour cet exemple) via l'option -i de scp.

Par exemple, la commande suivante, exécutée sur votre machine locale, transfère le fichier local_data de votre machine locale dans le répertoire /path/to/. sur Jean Zay :

login_local@machine_locale:~$ scp -i ~/.ssh/id_ecc_rsync local_data login_idris@jean-zay.idris.fr:/path/to/.
local_data                              100% ...

Inversement, la commande suivante, exécutée sur votre machine locale, transfère le fichier jean-zay_data du répertoire /path/to de Jean Zay dans le répertoire courant de votre machine locale :

login_local@machine_locale:~$ scp -i ~/.ssh/id_ecc_rsync login_idris@jean-zay.idris.fr:/path/to/idris_data ./.
idris_data                              100% ...

Ce type de certificat n'étant pas protégé par une passphrase, aucun mot de passe n'est demandé lors des transferts.

Expiration du certificat

Actuellement, aucune notification n'est envoyée pour signaler l'expiration des certificats SSH. Pour connaître la date de fin de validité de votre certificat, vous pouvez lancer la commande suivante :

# exemple pour le certificat de type "interactive" ~/.ssh/id_ecc_pty.pub
ssh-keygen -Lf .ssh/id_ecc_pty.pub 

Celle-ci retournera des informations au format suivant, où vous trouverez la date de validité du certificat dans la ligne Valid:… :

id_ecc_pty.pub:
        Type: 
        Public key: 
        Signing CA: 
        Key ID: 
        Serial: 
        Valid: from 2023-05-31T10:12:10 to 2024-05-30T10:12:40
        Principals: 
        Critical Options: (none)
        Extensions: