Ce mémo donne les étapes clés pour pouvoir générer une clé ssh sous windows afin de se connecter à un serveur linux sans entrer de mot de passe. Comme d’habitude, ce mémo n’a pas pour vocation d’être un tutoriel mais bien un aide-mémoire.
1. Génération de la clé sous windows
Générer une clé SSH avec la commande :
ssh-keygen -t ed25519 -C "<courriel-ou-identifiant-pour-reconnaître-la-machine>"
1.1. Si l’on veut utiliser l’agent SSH
En administrateur, vérifier si le service ssh-agent est lancé
Get-Service ssh-agent
S’il n’est pas lancé, utiliser la commande :
# Set-Service -StartupType Manual permet de lancer manuellement le service.
Get-Service ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent
Vérifier de nouveau l’état du service.
Ajouter la clé SSH à l’agent SSH :
ssh-add ~\.ssh\<nom-de-la-clé>
Après cela, on peut supprimer le fichier de clé privé par sécurité, car il est dorénavant géré par ssh-agent.
1.2. Si l’on veut utiliser le fichier de configuration ssh
Éditer ou créer le fichier dans C:\Users\<dossier-de-l'utilisateur>\.ssh\config
et ajouter les lignes suivantes :
Host <nom-pour-l'hote>
HostName <hostname>
User <username>
IdentityFile "C:\Users\<dossier-de-l'utilisateur>/.ssh/<nom-de-la-clé-privée>"
2. Transfert de la clé publique sur le serveur
Avec git-bash, on peut utiliser la commande :
ssh-copy-id -i <fichier-clé-publique> <identifiant>@<adresse-ip-du-serveur>
Autrement, copier la clé publique sur le serveur :
scp <fichier-clé-publique> <identifiant>@<adresse-ip-du-serveur>:<chemin-du-répertoire-ssh>
Ensuite, sur le serveur, copier le contenu de la clé publique dans le fichier ~/.ssh/authorized_keys
cat <fichier-clé-publique> >> ~/.ssh/authorized_keys
3. Note importante pour Git sous powershell
Si l’on veut utiliser la clé ssh pour pouvoir utiliser les commandes git sans mot de passe, il est nécessaire d’ajouter dans les variables d’environnement GIT_SSH = C:\Windows\System32\OpenSSH\ssh.exe
ou lancer la commande :
$SSHPath = (Get-Command -Name 'ssh.exe').Source
[Environment]::SetEnvironmentVariable('GIT_SSH', $SSHPath, 'User')
Contrôler l’existence de la variable :
echo $env:git_ssh
4. Bonus : lancer l’agent ssh sous linux
eval "$(ssh-agent -s)"