OpenSSH
SSH (Secure SHell) est un protocole qui permet de prendre le contrôle à distance d’une machine. Il nous servira ici à accéder à notre serveur sans avoir besoin d’y accéder physiquement et de travailler dessus à plusieurs.
D’abord, il faut installer OpenSSH, une suite d’outils permettant de créer des serveurs et des clients SSH :
# Pas nécessaire si OpenSSH a été installé en même temps qu'Ubuntu Server
$ sudo apt install openssh-server
$ sudo systemctl enable --now ssh
Toute la configuration du serveur SSH se trouve dans /etc/ssh/sshd_config, si il est nécessaire de la modifier, il est conseillé de garder une copie originale d’avant les modifications :
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
$ sudo chmod a-w /etc/ssh/sshd_config.original
Similairement, avant de relancer le serveur après une modification de la configuration, il vaut mieux la valider avec :
$ sudo sshd -t -f /etc/ssh/sshd_config
# S’il n’y a aucun problèmes on redémarre notre serveur SSH
$ sudo systemctl restart ssh
Il est maintenant possible d’accéder à notre serveur Ubuntu. Prenons l’exemple d’une machine avec l’IP 192.168.1.10 dont l’hôte s’apelle monhote :
$ ssh monhote@192.168.1.10
monhote@192.168.1.10’s password:
monhote@serveur:~$ echo "I'm in"
Configurer la connexion par clé
Par défaut les connexions se font par mot de passe (celui de l’hôte qu’on essaye d’accéder). Pour sécuriser l’accès à notre hôte, on met en place l’authentification par clé et on désactiver celle par mot de passe.
On commence par générer une paire de clé (une publique et une privée).
Il existe plusieurs algorithmes pour ça, on utilise ici ed25519 :
$ ssh-keygen -t ed25519
> Enter a file in which to save the key (/home/YOU/.ssh/id_ALGORITHM): <laisser vide>
> Enter passphrase (empty for no passphrase): <créer un mot de passe pour la clé>
> Enter same passphrase again: <confirmer ce mot de passe>
Pour que ssh utilise automatiquement cette clé, on l’ajoute manuellement :
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_ed25519
Chaque personne qui veut accéder au serveur doit générer et garder sa clé privée tandis que la clé publique est transférée au serveur avec :
$ ssh-copy-id monhote@192.168.1.10
Si tout est bon, on passe maintenant côté serveur pour n’accepter que la connexion par clé en ajoutant/modifiant ces lignes à /etc/ssh/sshd_config :
PermitRootLogin no
StrictModes yes
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
Avant de désactiver la connexion par mot de passe, vérifiez bien qu’aucun mot de passe soit demandé après avoir suivi cette démarche (simplement en faisant
ssh monhote@192.168.1.10).
Il existe des robots qui scanne les ports par défaut de milliers de machines pour détecter des potentielles vulnérabilités. Celui d’SSH est 22, il est possible de le changer en modifiant la ligne
Port. La commande pour vous connecter devient alorsssh -p 4267 monhote@192.168.1.10.
Configurer le X11 Forwarding
Par défaut SSH permet uniquement d’ouvrir un terminal à distance ou de transférer des fichiers. Cepandant, OpenSSH a une fonctionnalité appelée X11 forwarding qui permet d’ouvrir des applications graphiques à distance.
Du côté du serveur, il faut :
- Ajouter (ou modifier) ces lignes à
/etc/ssh/sshd_config;X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost no - Installer
xdg-utilset redémarrer le servicessh:sudo apt install xdg-utils sudo systemctl restart ssh
Côté client, il suffit de démarrer une session SSH avec -Y et de démarrer une application en fond avec & :
$ ssh -Y monhote@192.168.1.10
monhote@serveur:~$ firefox &
Pour les environnements compatibles, une fenêtre Firefox devrait apparaître côté client (si l’application est installée sur le serveur).