Title: Turris Omnia : se connecter en ssh avec une clé
Date: 2020-10-26 2:16
Category: sysadmin
Tags: OpenWRT, SSH, Turris Omnia, pl-fr
Cover: assets/backgrounds/turris_ssh_cle.jpg

J'utilise depuis maintenant deux ans un routeur [Omnia][l_turris] de chez
Turris, J'en ai parlé déjà lors de [cet article][l_wireguard]. Je veux pouvoir
m'y connecter en SSH de façon sécurisée; j'entends par là **avec un utilisateur
autre que root et avec une clef** (si possible en ed25519).

Si en règle générale OpenWRT est livré avec *dropbear* pour servir ssh, le
Turris Omnia utilise *OpenSSH* en version 8.0p1 au moment de l'écriture de cet
article.

## Créer un utilisateur non privilégié


C'est la première étape, tout est déjà prévu ou presque : on a bien l'utilitaire
`useradd` mais le répertoire `home` n'est pas présent. Il faut donc se connecter
en ssh sur le routeur puis renter les commandes suivantes :

```shell
mkdir /home
useradd -m user
chmod 700 /home/ephase
```

Il faut maintenant définir le mot de passe pour cet utilsateur :

```shell
passwd user
```

## Ajouter sa clé au nouvel utilisateur

Depuis ma machine, je n'ai plus au'à rajouter la partie publique de ma clé sur
le compte de l'utilisateur fraîchement créé :

```shell
ssh user@192.168.1.254 "umask u=rwx,g=,o=; mkdir ~/.ssh && tee -a \ 
~/.ssh/authorized_keys" < ~/.ssh/ma_cle.ed25519.pub
```

`192.168.1.254` est l'adresse de mon Turris Omnia et `~/.ssh/ma_cle.ed25519.pub`
la partie publique de ma clé.

Il ne reste plus qu'à contrôler que tout se passe bien en se connectant avec la
clé:

```shell
ssh user@192.168.1.1 -i ~/.ssh/ma_cle.ed25525
```

Si la connexion se passait mal, le simple fait de rajouter `-vvv` à la fin de la
commande précédente permettrait d'en apprendre un peu plus sur ce qui ne va pas.

## Sécuriser son accès

Maintenant que la connexion par clé est fonctionnelle, il est possible de
**sécuriser son accès**. Comme on est connecté avec notre utilisateur 'normal',
il faut commencer par utiliser `su` pour passer en super-utilisateur.

Première chose, empêcher la **connexion par mot de passe** : 

```shell
uci set sshd.@openssh[0].PasswordAuthentication='no'
```

Puis **empêcher la connexion du super-utilisateur**. Il sera tout de même 
possible d'utiliser `su` une fois connecté avec notre utilisateur standard comme
nous l'avons fait prédédement.

```shell
uci set sshd.@openssh[0].PermitRootLogin='no'
```

Il est aussi de bon ton de forcer l'utilisation de la **version 2 du 
protocole**:

```shell
uci set sshd.@openssh[0].Protocol='2'
```

Il ne reste plus qu'à valider les changement et redémarrer le serveur ssh :

```shell
uci commit
/etc/init.d/sshd restart
```

### Pour aller plus loin

Si vous voulez sécurise encore plus votre installation, je vous conseille la
lecture de l'article [OpenSSH : Durcir la configuration du serveur SSH][l_durci_sshd]
de Stéphane Huc.

J'ai pour ma part choisi de recréer les clefs serveur pour n'utiliser que
`ed25519` et `rsa` (4096 bits de longueur):

```shell
cd /etc/ssh/
rm -rf *_key,*_key.pub
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key -N "" -o -a 64
```

De modifier la configuration en conséquence à l'aide d'`uci`:

```shell
uci add_list sshd.@openssh[0].HostKey='/etc/ssh/ssh_host_ed25519_key'
uci add_list sshd.@openssh[0].HostKey='/etc/ssh/ssh_host_rsa_key'
```

Et de relancer le service

```shell
uci commit
/etc/init.d/sshd restart
```

## En conclusion

J'ai maintenant une configuration SSH un peu plus robuste grâce à OpenSSH. Bien
sûr `dropbear` est installé la plupart du temps sur OpenWRT, il est toujours
possible de l'installer (avec la commande `opkg install openssh-server` par
exemple) mais sa configuration se fera en éditant le fichier
`/etc/ssh/sshd_config`.

## Bibliographie

 * [Documentation][l_doc_turris] relative à SSH et à la connexion par clé sur le 
     wiki du Turris Omnia
 * [Documentation][l_doc_uci] d'uci sur le wiki du projet OpenWRT
 * [OpenWRT : OpenSSH pour remplacer Dropbear][l_sshd_dropbear] par Stéphane Huc

[l_turris]:https://www.turris.com/en/omnia/overview/
[l_wireguard]:{filename}../wireguard-avec-openwrt/index.md
[l_durci_sshd]:https://doc.huc.fr.eu.org/fr/sec/ssh/sshd-durci/
[l_doc_turris]:https://doc.turris.cz/doc/en/public/enable_ssh_access
[l_doc_uci]:https://openwrt.org/docs/guide-user/base-system/uci
[l_sshd_dropbear]:https://doc.huc.fr.eu.org/fr/sys/openwrt/openssh/
