SSH peut permettre une connexion sans mot de passe en utilisant l’authentification par clé privée/publique.
La clé privée est utilisée comme identifiant d’authentification et comme mot de passe, elle doit être tenue secrète et sécurisée.
La clé publique est copiée sur les systèmes auxquels l’utilisateur souhaite se connecter et sert à vérifier la clé privée. La clé publique n’a pas besoin d’être secrète.
Configuration de l’authentification par clé SSH
Une copie de la clé publique sera associée à votre compte sur le serveur. Lors de la connexion, le serveur SSH utilisera la clé publique pour lancer un défi qui sera résolu en utilisant la clé privée.
Génération de clés SSH
Pour créer une clé privée et une clé publique on utilise la commande ssh-keygen
.
Par défaut les :
- clés privées sont dans
~/.ssh/id_rsa
- clés publiques sont dans
~/.ssh/id_rsa.pub
Génération des clés :
$ ssh-keygen |
Dans un autre fichier de clé, l’option -f
détermine les fichiers dans lesquels les clés sont enregistrées :
$ ssh-keygen -f .ssh/key-number-two |
Passphrase
Sans passphrase, la clé privée générée n’est pas protégée et une personne tierce pourrait l’utiliser pour l’authentification.
Avec une passphrase, il faudra la saisir lorsque la clé privée sera utilisée (donc entrer la passphrase de la clé privée au lieu du mot de passe).
Le programme ssh-agent
peut temporairement mettre en cache la passphrase de la clé privée.
Démmarer ssh-agent
:
$ eval $(ssh-agent) |
Ajouter les clés au processus, la passphrase sera demandée une 1ère fois :
$ ssh-add |
Connexion :
$ ssh user@remotehost |
Partage de la clé publique
Avant de pouvoir utiliser l’authentification par clé, il faut copier la clé publique sur le système cible via la commande ssh-copy-id
.
Sans préciser de chemin, elle utilise le fichier /home/user/.ssh/id_rsa.pub
par défaut :
$ ssh-copy-id user@remotehost |
En précisant le chemin :
$ ssh-copy-id -i .ssh/my_key_2.pub user@remotehost |
Connexion au système distant
Connexion au système distant :
$ ssh user@remotehost |
Connexion au système distant en précisant un autre emplacement pour la clé :
$ ssh -i .ssh/my_key.pub user@remotehost |
Fichiers de configuration
Il est possible de directement modifier/créer les fichiers ~/.ssh/config
et /etc/ssh/ssh_config
pour préconfigurer les connexions SSH à des hôtes distants.
Configuration générale
La configuration génerale pour l’hôte se trouve dans :
/etc/ssh/ssh_config
Si l’on souhaite ajouter des bouts de configuration, il faut les placer dans le répertoire :
/etc/ssh/ssh_config.d
À noter que le fichier /etc/ssh/ssh_config
inclu les fichiers contenus dans répertoire ssh_config.d
à la fin :
$ cat /etc/ssh/ssh_config |
Exemple de contenu du répertoire /etc/ssh/ssh_config.d/
:
$ ll /etc/ssh/ssh_config.d/ |
Configuration utilisateur
La configuration pour un utilisateur se trouve dans son répertoire personnel :
~/.ssh/config
/home/user/.ssh/config
Exemple de contenu :
$ cat ~/.ssh/config |
Problèmes et debug
La commande ssh permet de visualiser les logs sur 3 niveaux de détail avec les options -v
, -vv
et -vvv
$ ssh -vvv user@remotehost |
/!\ Résumé des commandes
Avec l’emplacement par défaut des clés (dans ~/.ssh/id_rsa
et ~/.ssh/id_rsa.pub
) :
$ ssh-keygen // Génération des clés |
Avec un autre emplacement des clés (option -f
) :
$ ssh-keygen -f .ssh/keyP // Génération des clés |
Si la clé est protégée par une passphrase et que vous voulez temporairement la mettre en cache :
$ eval $(ssh-agent) // Démarrage de l'agent |
Commande pour debug (il est possible de ne mettre que le host
) :
$ ssh -v user@host |
Fichiers et dossiers de configuration :
#-- Configuration serveur |
Cas pratique
Génération de clé :
[aline@SERVER01 ~]$ ssh-keygen |
Generating public/private rsa key pair. |
Copy de la clé publique :
[aline@SERVER01 ~]$ ssh-copy-id aline@SERVER02 |
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/aline/.ssh/id_rsa.pub" |
Commande à distance :
[aline@SERVER01 ~]$ ssh aline@SERVER02 hostname |
aline@SERVER02's password: |
Liste des fichiers:
[aline@SERVER01 ~]$ ls -l /home/aline/.ssh |
total 12 |
Documentation
MAN ssh-keygen(1)
MAN ssh-copy-id(1)
MAN ssh-agent(1)
MAN ssh-add(1)