Bannière

Accéder à un serveur linux via une clé SSH sous windows

  Le 29 juin 2023     Aurélien Schnoebelen     #linux#windows  

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)"