# Créer des clés SSH dans Windows et WSL



Créer les clés dans l'invite de commande:

```
C:\Users\enzo2> ssh-keygen
```

Crée un dossier `.ssh` contenant les clés publique/privée

On copie la clé publique sur le serveur:

```
C:\Users\bruno\Desktop> type C:\Users\bruno\.ssh\id_rsa.pub | ssh -p42666 bruno@192.168.1.7 'cat >> .ssh/authorized_keys'
** ne marche pas **
```

Copier les clés dans wsl:

```
cp -r /mnt/c/Users/bruno/.ssh ~/.ssh
```

ou créer des liens symboliques:

```
> ln -s /mnt/c/Users/bruno/.ssh/id_rsa ~/.ssh/id_rsa
> ln -s /mnt/c/Users/bruno/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub
> ln -s /mnt/c/Users/bruno/.ssh ~/.ssh
```

Dans wsl, fixer les permissions:

```bash
$ cd ~/.ssh
$ chmod 600 id_rsa
$ chmod 644 id_rsa.pub
$ chmod 644 known_hosts

$ cd ~
$ chmod 700 .ssh
```

On se connecte au serveur avec le mdp:

```bash
$ ssh -p42666 bruno@192.168.1.7
bruno@192.168.1.7's password:
bruno@DS916:~ $
bruno@DS916:~ $ exit
```

On copie la clé publique sur le serveur:

```bash
$ cd ~/.ssh
$ cat id_rsa.pub | ssh -p42666 bruno@192.168.1.7 'cat>> ~/.ssh/authorized_keys'
$ cat id_rsa.pub | ssh funnymac@ftp.cluster011.ovh.net 'cat>> ~/.ssh/authorized_keys'
```

On se connecte enfin au serveur avec la clé:

```bash
$ ssh -p42666 bruno@192.168.1.7
Enter passphrase for key '/home/enzo2/.ssh/id_rsa'
bruno@DS916:~ $
```

On installe **keychain**:

```bash
$ sudo apt install keychain
```

puis

<u>pour Bash</u>: ajouter au fichier `~/.bashrc`

```bash
eval `keychain --eval --agents ssh id_rsa`
```

<u>pour Zsh:</u> ajouter au fichier `.zshrc`

```bash
eval `keychain --eval --agents ssh id_rsa`
```

ou ajouter au fichier .zshrc

```bash
function check_ssh {
  [[ $3 =~ '\bssh\b' ]] || return
  [[ -n "$SSH_AGENT_PID" && -e "/proc/$SSH_AGENT_PID" ]] \
    && ssh-add -l >/dev/null && return
  eval `keychain --eval id_dsa --timeout 60`
}    
autoload -U add-zsh-hook
add-zsh-hook preexec check_ssh
```

https://unix.stackexchange.com/a/532477


