Ssh est à la fois un logiciel et un protocole, comme expliqué sur la page Wikipédia.

Installer GNU/Linux Debian 11

Lors de l'installation de Debian 11, en plus du nom de machine, du domaine, du partitionnement, du choix de la langue, du choix des paquets, etc, nous noterons en particulier les points suivants;

Nous choisirons bestiole comme premier nom d'utilisateur.

Dans les deux cas, nous utiliserons un mot de passe très simple pour faciliter l'installation et nous le changerons plus tard.

Les mots de passe seront donc les mêmes pour root et pour bestiole et nous utiliserons trucmuche.

Nous n'entrerons pas dans les détail du choix de la langue, de la configuration du clavier, du partitionnement ou de la configuration du réseau.

Pour ce qui est du choix des paquets, nous cocherons uniquement [x] SSH server.

Installateur Debian 11 affichant le sélecteur de paquet où seul SSH Server est coché

Retrouver l'adresse IP du nouveau serveur

Avant de pouvoir se connecter en réseau sur la machine fraîchement installée, il faut retrouver son adresse IP.

S'y connecter physiquement

Puisque le serveur vient d'être installé, vous devriez pouvoir vous y connecter en utilisant le clavier.

En tant que root ou bestiole avec le mot de passe trucmuche.

Et une fois votre session ouverte, la commande suivante vous affichera les adresses IPv4 de la machine.

# ip a s

Pour ip address show et dont le résultat devrait ressembler à ceci;

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 16:14:ed:f4:aa:33 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.30.27/24 brd 192.168.30.255 scope global dynamic ens18
       valid_lft 6271sec preferred_lft 6271sec
    inet6 fe80::1414:f0ff:fea7:7b31/64 scope link 
       valid_lft forever preferred_lft forever

Et dans notre cas, c'est l'adresse 192.168.30.27 qui nous intéresse.

Ou bien scanner le réseau

Depuis un autre ordinateur GNU/Linux la commande arp-scan peut être utile.

Si vous connaissez le range ip de votre réseau, elle vous affichera la liste des adresses découvertes dans la table arp.

$ sudo arp-scan 192.168.30.0/24

Ou, si vous ne connaissez pas le range ip de votre réseau, vous pourrez essayer avec ceci;

$ sudo arp-scan --localnet

Première connexion ssh

Maintenant que l'adresse IPv4 du serveur est connue, il est possible de s'y connecter à distance depuis un autre ordinateur GNU/Linux.

Le mot de passe de l'utilisateur bestiole sera demandé pour vous connecter à la machine 192.168.30.27 sur le port 22, le port par défaut de ssh.

$ ssh bestiole@192.168.30.27
bestiole@192.168.30.27's password: 
Linux ssh 5.10.0-8-amd64 #1 SMP Debian 5.10.46-5 (2021-09-23) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Oct  8 20:03:16 2021 from 192.168.30.31
bestiole@ssh:~$

Installer sudo

Par défaut sudo n'est pas installé sur Debian 11.

Le mot de pass root sera demandé et c'est, pour rappel, le même que celui de bestiole, à savoir trucmuche.

Notez le - dans la commande su - qui permet de démarrer un shell root avec ses propres variables d'envirronement et pas celles de l'utilisateur bestiole.

bestiole@ssh:~$ su -
Password: 
root@ssh:~# 
root@ssh:~# apt update
Hit:1 http://security.debian.org/debian-security bullseye-security InRelease
Hit:2 http://deb.debian.org/debian bullseye InRelease
Hit:3 http://deb.debian.org/debian bullseye-updates InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@ssh:~# apt install sudo
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  sudo
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,059 kB of archives.
After this operation, 4,699 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main amd64 sudo amd64 1.9.5p2-3 [1,059 kB]
Fetched 1,059 kB in 0s (4,589 kB/s)
Selecting previously unselected package sudo.
(Reading database ... 20861 files and directories currently installed.)
Preparing to unpack .../sudo_1.9.5p2-3_amd64.deb ...
Unpacking sudo (1.9.5p2-3) ...
Setting up sudo (1.9.5p2-3) ...
root@ssh:~# 

Ajouter bestiole au groupe sudo

root@ssh:~# adduser bestiole sudo
Adding user `bestiole' to group `sudo' ...
Adding user bestiole to group sudo
Done.

Si lors de la commande adduser bestiole sudo vous avez le message d'erreur bash: adduser: command not found, c'est que vous avez oubliez le - lors de l'utilisation de la commande su - en amont.

Configurer sudo sans mot de passe pour bestiole

Lorsque vous êtes connecté en tant que bestiole, vous devez connaître le mot de passe root si vous souhaitez utiliser la commarde su - ou taper le mot de passe de bestiole si vous utilisez la commande sudo.

Pour y remédier, et pouvoir utiliser sudo sans mot de passe, il faut ajouter la ligne suivante au fichier de configuration de sudo.

Pour ce faire, c'est la commande visudo qui sera utilisée.

# visudo

Par défaut, c'est l'éditeur nano qui vous affichera le fichier de configuration de sudo.

À la fin du fichier, vous pourrez ajouter la ligne suivante;

…
bestiole ALL=(ALL) NOPASSWD: ALL

Et utiliser les touches CTRL + x pour quitter et répondre y ou bien o pour enregistrer votre changement.

Tester le changement

Vous pouvez quitter le shell root avec la combinaison de touche CTRL + d ou en tapant exit.

root@ssh:~# exit
logout
bestiole@ssh:~$ 

Et pour vérifier que bestiole peut utiliser sudo sans mot de passe;

bestiole@ssh:~$ sudo su -
root@ssh:~#

Devrait vous ouvrir un shell root automatiquement.

Création d'une paire de clé sur votre ordinateur personnel

Pour que vous (en fait le compte utilisateur local de votre ordinateur personnel) soit en mesure de se connecter à un serveur ssh sans avoir à taper de mot de passe, il faut que vous (votre utilisateur local) disposiez au moins d'une paire de clé publique / privée.

Cela se fait sur votre ordinateur, celui que vous utiliserez pour vous connecter au serveur ssh.

Votre utilisateur local disposera d'un dossier ~/.ssh/ qui contiendra votre ou vos clés privées et publiques.

Attention que ces fichiers −parce que ce ne sont que des fichiers−, surtout la ou les clé privées, sont des documents très précieux qu'il vous faudra sauvegarder et ne transmettre à personne.

Lors de la génération de votre paire de clé, vous pourrez choisir le type de chiffrement et éventuellement un mot de passe pour déverrouiller la clé privée. À chaque fois que vous souhaiterez utiliser la clé privée, et donc à chaque fois que vous souhaiterez vous connecter au serveur en utilisant ssh vous serez invité·e à taper le mot de passe de la clé. La plus part des distributions GNU/Linux disposent d'un logiciel, ssh-agent qui conserve l'accès à votre ou vos clé tant que vous ne fermez pas votre session ou que vous ne redémarrez pas votre ordinateur personnel.

Si votre ordinateur fonctionne sur un disque chiffré et que votre mot de passe de session personnel est suffisamment fort (long) vous pouvez éventuellement vous passer de mot de passe pour votre ou vos clé, mais ce n'est pas une bonne idée.

À vous de choisir entre un peu plus ou un peu moins de sécurité, mais prennez bien conscience que les clés publique et surtout les clés privées peuvent donner accès aux serveurs ssh que vous gérez sans vous demander de taper quoi que ce soit.

Avec l'algo RSA

Voici la commande pour créer une paire de clé RSA avec l'algorithme RSA avec une taille de 2048 bit.

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/vous/.ssh/id_rsa
Your public key has been saved in /home/vous/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:33Y240klIIrel19EncUx1w/zVeP80SszU+4X49N4 vous@votreordi
The key's randomart image is:
+---[RSA 2048]----+
|              +o*|
|             o.C*|
|            =.*o@|
|            .Oo%*|
|        T   =oOoO|
|         . .==. +|
|          . o *..|
|           . = +E|
|              O  |
+----[SHA256]-----+

Avec l'algo ed25519

Plus récent et plus performant, mais pas compatible avec des versions plus anciennes de ssh, il y a l'algorithme ED25519.

# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/vous/.ssh/ed25519
Your public key has been saved in /home/vous/.ssh/ed25519.pub
The key fingerprint is:
SHA256:ZlHC9yLZL6Ijd86YXNPpGeeBkJ6DMQ43SYfMp3l49ti vous@votreordi
The key's randomart image is:
+--[ED25519 256]--+
|        ..+o    .|
|         +.=.o + |
|        ..B.B.*..|
|       o o+*.B.o.|
|      . SoB.  +. |
|       o..oo . oo|
|     o + . .. =..|
|    . o + o  o . |
|        E=.      |
+----[SHA256]-----+

Le choix entre RSA ou ED25519 dépend de la vielliesse des serveurs ssh auxquels vous souhaiterez vous connecter, minimum Debian 8 pour ED25519.

Copie de la clé vers votre serveur ssh

Pour que votre utilisateur local, celui de votre ordinateur personnel, puisse se connecter en utilisant sa clé privée, il faut que l'utilisateur bestiole du serveur dispose de la clé publique correspondante.

Pour ce faire, il existe au moins deux méthodes pour transmettre là clé publique sur le serveur ssh, dans la liste des clés authorizées pour l'utilisateur bestiole.

Avec ssh-copy-id

Cette commande est à faire depuis votre ordinateur personnel.

$ ssh-copy-id bestiole@192.168.30.27

Il vous sera demandé te taper le mot de l'utilisateur bestiole, à savoir trucmuche.

En éditant le fichier authorized_keys sur le serveur

Une autre méthode moins automatique, est d'éditer le fichier de clés publiques autorisées pour l'utilisateur bestiole sur le serveur ssh.

Cela se fait sur le serveur ssh en copiant / collant le contenu du fichier ~/.ssh/id_rsa.pub de votre ordinateur personnel.

Sur votre ordinateur personnel;

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5daRSSVJD2xVXnqcB4pmjthAFr2u0/W+BP1OESo7lm60If9z7m80ztyFDmdfm82RDM/tpgaV050DDD9IZrfjmGjA3lTWFirA6CntWJsa0xYgtNrY9vop6ZRpRWx/+2AM5mLD+mqOdn++w+6/2ee6V0zIsaXr863XRApi81X0BlqPathNehv0/37sd2+JhtmhFHhBweGgjYllPIiAMmzzt23J2TSS8V0kNt6ZEjnTZKUUBmdTYwKZkLZDNxfCSptLFUf/pq7GgjxMK6x7g4roRCWwOl80RWs1mXodZ8FOGAHKlQ8mZoQCZ3uK4DpE74h8DOb3x5g7WWMf1IXtQhM8P vous@votreordi

Faites bien attention au .pub qui est bien la partie publique de votre paire de clé.

Vous pouvez sélectionner le texte depuis ssh-rsa AAAA… jusque …vous@votreordi et utiliser la combinaison de touche CTRL+MAJ+C pour copier la clé publique.

Sur le serveur;

$ ssh bestiole@192.168.30.27 # si vous n'y êtes plus connecté et tapez le mot de passe trucmuche
$ mkdir ~/.ssh
$ nano ~/.ssh/authorized_keys

L'éditeur nano vous affiche un fichier vide (sauf si il contient déjà des clés autorisées) et vous pouvez y coller votre clé publique avec les touche CTRL+MAJ-v.

Quittez l'éditeur avec CTRL+x et répondez o ou y pour enregistrer le fichier.

Nous allons ensuite modifier les droits d'accès à ce fichier pour autoriser uniquement le propriétaire du fichier, à savoir bestiole à la lecture et écriture et personne d'autre.

$ chmod 0600 ~/.ssh/authorized_keys

Voilà, votre clé publique est dans la liste des clés autorisées pour l'utilisateur bestiole, qui pour rappel, dispose de la possibilité de devenir root sans avoir de mot de passe à taper, comme nous l'avons fais bien avant dans ce tuto.

Tester la connexion

Mis à part le mot de passe qui déverrouillerait votre clé privée, vous devriez pouvoir vous connecter au serveur sans avoir à taper le mot de passe de l'utilisateur bestiole. Et si votre clé privée n'est pas protégée par un mot de passe, vous n'aurez rien à taper de plus que la commande ssh suivante;

$ ssh bestiole@192.168.30.27

Et vous devriez arriver dans un shel de bestiole sur le serveur.

Et si vous tapez sudo su -, vous devriez être dans le shell de root sans avoir eu à taper de mot de passe.

Configurer ssh sur le serveur

Actuellement, le serveur ssh autorise encore l'utilisation de mots de passe pour que les utilisateur·ice·s telque bestiole se connectent.

Dans la version 11 de Debian, l'utilisateur root ne peut déjà plus se connecter avec mot de passe mais il pourrait encore se connecter en utilisant des clés publiques / privées.

L'idée est d'interdire l'accès à root que ce soit avec mot de passe ou avec clés et aussi de désactiver l'authentification par mot de passe pour les autres utilisateur·ice·s du serveur, mais d'autoriser les connexions utilisant des clés publiques / privées.

Il faut décommenter, éditer ou modifier les variables suivantes dans le fichier /etc/ssh/sshd_config;

# nano /etc/ssh/sshd_config
…
#PermitRootLogin prohibit-password
PermitRootLogin no
…
#PubkeyAuthentication no
PubkeyAuthentication yes
…
#PasswordAuthentication yes
PasswordAuthentication no
…

Et utiliser CTRL+x pour quitter en répondant o ou y pour enregistrer les modifications.

Et puisque nous avons modifier la configuration du serveur ssh, il faut redémarrer le service;

# service ssh restart 

Ou bien;

# systemctl restart ssh

Conclusion

Si tout c'est bien passé, vous devriez pouvoir vous connecter à votre serveur ssh en tant que bestiole et pouvoir utiliser sudo sans avoir à taper de mot ou de phrase de passe.

Et root ne peux plus ouvrir directement de terminal sur votre serveur ssh, ce qui est un peu plus sécurisé puisque plein de bots tentent de se connecter en tant que root@machine avec des mots de passe aléatoires.