Table des matières

, , ,

SSH: Authentification par clé

Notes concernant la mise en place d'une authentification par clé. L' authentification par clé est préférable à l'authentification par mot de passe. Elle augmente considérablement la sécurité du système.

Prérequis

Le serveur distant sur lequel on souhaite se connecter par clé doit être configuré pour accepter ce type d'authentification, c'est en général le cas par défaut. Pour vérifier, rechercher la directive PubkeyAuthentication dans le fichier /etc/ssh/sshd_config.

Remarque: dans le fichier de configuration /etc/ssh/sshd_config les directives commentées présentent leur valeur par défaut.

#PubkeyAuthentication yes

Générer la clé

Pour générer une paire de clés, invoquer ssh-keygen:

$ ssh-keygen -t rsa -b 4096 -C username@domain.tld -f id_user_rsa

La paire de clé est propre au compte local pour lequel elle est générée. Elle est placée dans le dossier ~/.ssh. Elle permettra à l'utilisateur de s'authentifier sur le serveur ssh distant.

Copier la clé publique sur les machines distantes

L'utilisateur doit copier la partie publique de sa paire de clés sur les machines distantes auxquelles il souhaite se connecter via ssh. Un script se charge de faire:

$ ssh-copy-id -i /chemin/man_cle/id_dsa.pub user@ip_machine 
Ce script ne fonctionne que si le serveur ssh écoute sur le port 22. Dans le cas contraire, il faudra effectuer l'opération manuellement.

La commande suivante peut être utilisée pour copier la clé publique:

$ cat /path/to/my_key/id_dsa.pub | ssh -l login -p 2202 host.domain.net "cat - >> ~/.ssh/authorized_keys"
La copie de la clé publique sur le serveur distant implique que l'utilisateur ait accès à la machine via une authentification par mot de passe. Si ce n'est pas le cas, il lui faudra communiquer sa clé publique à l'administrateur du système distant qui se chargera de mettre à jour le fichier authorized_keys.
S'assurer qu'une ligne vide sépare deux clés dans le fichier ~/.ssh/authorized_keys sinon les deux clés seront inutilisables.

Utiliser un agent

Lors de la procédure d'authentification par clé, la passphrase est demandée systématiquement. Pour changer ce comportement et se connecter automatiquement on peut utiliser un agent ssh. Le temps de la session, l'agent ssh garde en mémoire la passphrase et la fournit automatiquement lors de la procédure d'authentification.

Vérifier que l'agent ssh est accessible:

$ printenv | grep SSH
SSH_AGENT_PID=1718
SSH_AUTH_SOCK=/tmp/keyring-vhsknS/ssh

La variable $SSH_AGENT_PID est bien déclarée, si ce n'est pas le cas:

$ ssh-agent $SHELL

La commande ssh-add permet de conserver la passphrase pour la clé passée en paramètre. Lorsqu'elle est invoquée sans argument elle charge les clés présentes dans le répertoire ~/.ssh/

$ ssh-add /path/to/id_dsa

Modification de la configuration du serveur SSH

Dans le fichier de configuration du serveur ssh /etc/ssh/sshd_config:

...
PermitRootLogin no

# Moins restrictif, permet un acces en root mais via clés 
#PermitRootLogin prohibit-password

...
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
...

# Spécifier quels utilisateurs peuvent se connecter
AllowUsers username builder@127.0.0.1

Régénérer la clé publique

Voir les commandes spécifiques à la gestion des clés sur le wiki gestion-cles.

Références