Voir man ssh
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.
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)
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>
chmod 600 ~/.ssh/authorized_keys
chmod 600 authorized_keys
chmod 600 ~/.ssh/id_rsa
Pour les machines Windows, voir PuTTY : Accès à une machine Linux depuis Windows avec PuTTY.
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