SSH : administrer à distance
Configuration de SSH
SSH, c'est génial. Cet outil vous permettra de vous connecter au serveur à partir d'un autre ordinateur. Vous pourrez alors l'administrer à distance sans devoir y brancher un clavier et un écran. À vrai dire, sauf exception, tous les serveurs sont administrés ainsi, mais vous êtes chez vous après tout, donc vous pouvez faire comme vous voulez.
De plus, SSH ne sert pas qu'à ça. Il est capable de créer des tunnels chiffrés vers votre serveur. Vous serez en mesure d'avoir un espace de stockage de fichiers en SFTP, voire d'en faire une sorte de NAS.
Quoi qu'il en soit, si vous n'avez pas activé SSH lors de l'installation d'OpenBSD, vous pouvez l'activer avec la commande suivante :
# rcctl enable sshd
Bien que ce protocole soit fiable, ça ne coûte rien de prendre quelques
précautions de sécurité. On va éditer la
configuration de SSH dans le fichier /etc/ssh/sshd_config
.
- Vous pouvez changer le port utilisé par défaut, par exemple:
Port 222
. dans tous les cas, pensez à ouvrir ce port dans le parefeu et le rediriger dans le routeur. - Très important, retirez à
root
la possibilité de se connecter en SSH avec cette ligne, ceci afin d'éviter des attaques par bruteforce directement sur l'identifiant “root” :
PermitRootLogin no
Pour vous connecter à la machine, il faudra créer un utilisateur
simple, par exemple toto
, avec la commande
adduser
.
Une fois les modifications réalisées, relancez le démon SSH :
# rcctl reload sshd
Par la suite, pour vous connecter au serveur, vous utiliserez la commande suivante à partir de votre ordinateur (dans un terminal, ou avec un client comme putty sous windows) :
$ ssh toto@chezmoi.tld
Et si vous avez changé le port par défaut :
$ ssh -p 222 toto@chezmoi.tld
Ça demandera le mot de passe de l'utilisateur toto, puis vous pourrez administrer le serveur à distance.
Connexion par clés (sans mot de passe)
Il est tout à fait possible de se connecter en SSH sans utiliser de mot de passe. À la place, on se sert de paire de clés. C'est une bonne idée au moins pour les raisons suivantes :
- C'est nettement plus sécurisé.
- Ça évite d'écrire un mot de passe à chaque fois 😎.
- C'est pratique car permet de lancer des commandes ssh dans des scripts.
Toutefois, cela vous impose d'avoir la clé privée sur la machine servant à se connecter, ce qui n'est pas toujours le cas.
Voici la marche à suivre :
Sur le serveur, modifiez le fichier
/etc/ssh/sshd_config
pour qu'il contienne cette ligne :
PubkeyAuthentication yes
Maintenant, sur l'ordinateur qui veut accéder au serveur, nous allons générer la paire de clés avec la commande suivante :
ssh-keygen -t ed25519 -f ~/.ssh/clessh -a 100
Vous trouverez deux nouveaux fichiers :
-
~/.ssh/clessh
: c'est votre clé privée, ne la divulguez jamais à personne. -
~/.ssh/clessh.pub
: la clé publique. Contrairement à son nom, c'est comme une serrure dans laquelle seule la clé privée peut entrer.
L'algorithme ed25519 est utilisé. Très sécurisé, il n'est pas supporté par d'anciens serveurs (normalement pas votre cas). Pour la forme, notez qu'il est possible d'utiliser une clé RSA ainsi :
$ ssh-keygen -t rsa -b 4096 -p -f ~/.ssh/clessh -o -a 64
Ne mettez pas de mot de passe puis patientez le temps que les clés soient générées.
Sur un système OpenBSD ou Linux, ous prendrez soin
d'éditer le fichier ~/.ssh/config
de votre
utilisateur pour le remplir ainsi :
Host votreserveur
HostName nomtreslong.vraimenttroplong.long
User jeanbaptiste.professeurdanseur
Port 222
PasswordAuthentication no
IdentityFile ~/.ssh/clessh
Bien sûr, vous modifierez le nom de domaine de votre serveur ainsi que le nom de l'utilisateur qui doit se connecter. Ensuite, lancez la commande suivante pour copier la clé publique sur le serveur.
ssh-copy-id -p xxx -i ~/.ssh/clessh.pub "jeanbaptiste.professeurdanseur@nomtreslong.vraimenttroplong.long"
Ici, remplacez “xxx
” par le port utilisé par SSH.
Dans le cas où l'outil ssh-copy-id
ne serait pas disponible, il faut
copier la clé publique manuellement. Pour l'afficher, tapez
$ cat ~/.ssh/clessh.pub
Connectez-vous sur le serveur en SSH, puis ajoutez dans le fichier
~/.ssh/authorized_keys
le contenu du fichier affiché précédemment.
Une fois ceci fait, vous pouvez vous connecter sans devoir entrer de mot de passe avec simplement la commande :
$ ssh votreserveur
Pratique non?
Si ça fonctionne comme prévu, vous pouvez si vous le souhaitez
désactiver l'identification par mot de passe pour de bon afin de ne
garder que le jeu de clés comme possibilités. Modifiez le fichier
/etc/ssh/sshd_config
pour qu'il contienne cette ligne :
PasswordAuthentication no
Attention à ne pas perdre votre jeu de clés !
Transférer un fichier
Vous aurez certainement besoin d'envoyer des fichiers sur votre serveur
de temps en temps. Une fois que SSH est configuré, vous pourrez utiliser
la commande scp
depuis n'importe quel ordinateur afin de copier un
fichier vers votre serveur. Par exemple :
$ scp -P <port ssh> utilisateur@chezmoi.tld:/emplacement/de/destination fichier-a-copier
C'est très pratique.
Si vous souhaitez toutefois transférer de nombreux fichiers, sauvegarder ou stocker des documents, tournez-vous plutôt vers le protocole SFTP, plus sécurisé et disposant de davantage de fonctionnalités comme la reprise d'un transfert partiel.
Si les fichiers sont trop gros, vous pouvez les découper pour réaliser les transferts en plusieurs fois.
Quoi que vous décidiez, c'est toujours une bonne idée de vous assurer que le transfert s'est bien déroulé en vérifiant la somme de contrôle des fichiers envoyés.
Aller plus loin avec SSH
Pour en apprendre plus sur la sécurisation et l'utilisation de SSH, vous pouvez lire les pages suivantes :
Je vous invite à mettre en place un outil contre les attaques par bruteforce, notamment avec sshguard ou vilain, deux outils présentés dans ce document.