Générer des clés
Pour éviter de devoir taper des mots de passe constament en se connectant avec SSH, ont peut générer sur un client SSH des clés asymétrique (publique / privée) qui serviront à authentifier la personne qui se connecte en lieu et place du mot de passe.
Sur le client on génère les clés :
ssh-keygen -b 4096
Les fichiers id_ed25519 et id_ed25519.pub se créés dans le dossier ~/.ssh/
Puis on copie la clé publique sur le serveur :
# @client
ssh-copy-id user@srv.admx.osef
# {mot de passe} [entrée]
Et voilà ! Désormais un ssh user@srv.admx.osef depuis le client Ubuntu ne vous demandera plus de mot de passe.
Changer le mot de passe d'une clé existante :
ssh-keygen -p -f ~/.ssh/id_ed25519
Créer un fichier « config »
Il est possible de créer le fichier texte ~/.ssh/config pour y stocker des paramètres qui n'auront plus à être systématiquement écrit. Exemple :
Host srv
HostName srv.admx.osef
User user
Host *
Compression yes
Désormais un simple ssh srv suffira à contacter le serveur.
Agent SSH
⚠️ Ne fonctionne pas nativement dans PowerShell
Si vous avez fourni une passphrase pour chiffrer la clé privée de vos clés SSH, vous pouvez utiliser l'agent SSH pour qu'il s'en souvienne jusqu'au prochain redémarrage. Cela vous évitera de saisir la passphrase à chaque connexion. Pour activer l'agent SSH, saisissez les commandes suivantes :
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519
# Pour la clé des TP
ssh-add ~/.ssh/cle_tp_admx
👉 Sous Linux, avec l'environnement de bureau Gnome, si la passphrase de votre clé est identique à votre mot de passe de connexion, Gnome activera pour vous l'agent SSH et il chargera la clé automatiquement. Ainsi, vous ne saisirez votre mot de passe qu'une fois par jour, en ouvrant votre session.
Flemme XXL
Si vous ne voulez pas avoir à vous souvenir de lancer le client SSH à chaque démarrage de votre ordinateur ou de vos serveurs, vous pouvez automatiser le chargement de ssh-agent à la première connexion dans un terminal interactif. Pour cela, il faut ajouter et adapter ceci dans votre fichier ~/.bashrc :
SSH_ENV="$HOME/.ssh/agent-environment"
start_agent_ssh() {
printf "Initialising new SSH agent... "
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
chmod 600 "${SSH_ENV}"
printf "succeeded\n"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
/usr/bin/ssh-add "$HOME/.ssh/id_ed25519"
/usr/bin/ssh-add "$HOME/.ssh/cle_tp_admx"
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep 'ssh-agent$' > /dev/null || { start_agent_ssh; }
else
start_agent_ssh
fi
Une fois en place. Ce bout de script va provoquer l'apparition d'une demande de mot de passe (de la ou des clés SSH) à chaque premier lancement d'un terminal. Ensuite, le mot de passe n'est plus demandé avant le prochain reboot. À moins que vous ne décidier de tuer l'agent SSH (killall ssh-agent).
