Authentification

Voir man ssh

Principe

Pour éviter de se logger en entrant un mot de passe sur la machine distante il faut mettre en place une authentification par clé :

Le mécanisme d'authentification s'assure lors de la connexion que la clé privée de l’utilisateur correspond à la clé publique connue du serveur distant.

Mise en oeuvre

La commande ssh-keygen génère une couple de clés privée et publique pour l'authentification d'un compte utilisateur.

Pour générer les clés d'un utilisateur :

ssh-keygen -C «user»-«Machine»-«date» (Clé RSA) –> Répondre “return” aux questions (valeurs par défaut)

La paramètre -C permet de fixer un commentaire associé à la clé. «user»-«Machine»-«date» est un choix personnel.
La clé privé ne doit jamais être diffusée à qui que ce soit.

Ces clés sont stockées dans le dossier ~/.ssh

roge@raspi ~ $ ll .ssh
total 8
-rw-r--r-- 1 roge roge    0 Aug  6 00:27 authorized_keys   --> Liste des clé publiques authorisées pour ce compte
-rw------- 1 roge roge 1679 Aug  6 00:26 id_rsa            --> clé privée
-rw-r--r-- 1 roge roge  388 Aug  6 00:26 id_rsa.pub        --> clé publique (à diffuser)

Pour utiliser l'authentification par clé sur une machine distante il faut copier sa clé publique sur la machine distante à la fin du fichier .ssh/authorized_keys :

cat ~/.ssh/id_rsa.pub | ssh -p port <user>@<host> "cat - >> .ssh/authorized_keys"

puls efficace :

ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<host>

le fichier authorized_keys doit avoir des permissions -rw------- sinon il n'est pas pris en compte et le mot de passe est demandé.

chmod 600 ~/.ssh/authorized_keys

chmod 600 authorized_keys

L'authentification par clé est nécessaire pour tous les scripts batch qui font du ssh.
En cas de message “Permissions 0644 for '/home/xxx/.ssh/id_rsa' are too open.” -rw——-

chmod 600 ~/.ssh/id_rsa

Pour les machines Windows, voir PuTTY : Accès à une machine Linux depuis Windows avec PuTTY.

Tips & tricks

Quand on à la message:

Warning: the ECDSA host key for '<host>' differs from the key for the IP address '192.168.x.y'
Offending key for IP in /home/<user>/.ssh/known_hosts:3

Alors il faut supprimer les 3ieme ligne de known_hosts:

sed -i '3d' ~/.ssh/known_hosts