# Connexion Clé SSH

## Génération de la paire de clés:

Pour générer la paire de clé utiliser `ssh-keygen`. On préfèreras générer une clé en ECSDA d'une longueur supérieur à 256 bits pour respecter les recommandations R9 et R10 [du guide de l'ANSSI sur OpenSSH](https://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf). La clé publique est facilement reconnaissable car elle se fini en *.pub*.

```shell
ssh-keygen -t ecdsa -b 521
```

Il est possible de protéger les clés avec une phrase de passe. Cette phrase de passe doit être rentrée à chaque utilisation de la clé, ce qui n'est pas une bonne chose pour l'automatisation. Pour palier ce problème il est possible d'utiliser l'agent SSH `ssh-agent` qui va servir de trousseau de clé.

## Partage de la clé publique

La clé publique est celle qui doit être présente dans le fichier *authorized\_keys* sur le serveur distant. Il est recommander d'utiliser ssh-copy-id qui vas créer les fichier nécessaires et ajouter la clé automatiquement. Ce dernier n'est pas toujours disponible, alors il faut s'orienter vers des méthodes plus manuel.

#### ssh-copy-id:

```shell
ssh -i ~/.ssh/mykey user@host
```

#### Manuel:

Commencer par copier la clé publique sur le serveur distant, pas exemple avec scp:

```shell
scp mykey.pub user@host:/home/user
```

Puis ajouter la clé au fichier *authorized\_keys*:

```shell
echo -e "\n"`cat mykey.pub` >> .ssh/authorized_keys
```

## Agent SSH:

L'agent SSH permet de garder les clés de manière protégé en mémoire pour qu'elles puissent être utilisées sans entrer la phrase de passe. (Les clés sont gardée même après un redémarrage.)

#### Sous Windows :

<p class="callout info">Élévation de privilège requise</p>

Sous Windows l'agent SSH est désactivé par défaut. Il est possible de l'activer avec une commande Powershell:

```shell
Set-Service ssh-agent -StartupType Automatic 
```

Cette commande est l'équivalent d'aller dans le gestionnaire des services et de passer le démarrage du service *OpenSSH Authentication Agent* en "Automatique". Le démarrage "Automatique" veut dire que le service démarreras au démarrage de Windows.

Si l'on veut uniquement démarrer l'agent juste pour la durée de la session il est nécessaire de premièrement activer le service, puis de le démarrer :

```shell
Set-Service ssh-agent -StartupType Manual; Start-Service ssh-agent
```