Mise à jour : Debian 10.6 Buster
Secure Shell (ssh) est un programme client - serveur qui permet de prendre de façon sécurisé, le contrôle (connexion et exécution de commandes) d'un PC distant. Le client ssh est installé sur le PC local qui veut prendre le contrôle, le serveur ssh est installé sur le PC distant à contrôler
La version installée est openssh, implémentation libre du protocole ssh.
Sur le PC client (celui à partir duquel s'effectuera la connexion) installer openssh-client
$ sudo aptitude install openssh-client
Pour vérifier l'installation du client ssh :
$ ssh -V
OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 Sep 2019
Le fichier de configuration de openssh est situé en /etc/ssh
$ ls /etc/ssh/
ssh_config
Sur le PC serveur (celui sur lequel s'effectuera la conexion) installer openssh-server
$ sudo aptitude install openssh-server
Les fichiers de configuration principaux sont également situés en
$ ls -d /etc/ssh
Pour vérifier l'état du serveur ssh utiliser systemctl :
$ systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-11-04 19:49:43 CET; 3h 37min ago
....
Pour démarrer, arrêter le service
$ sudo systemctl start ssh.service
$ sudo systemctl stop ssh.service
$ sudo systemctl enable ssh.service
$ sudo systemctl disable ssh.service
Pendant l'installation du serveur des clés publiques et privées sont créées pour les algorithmes RSA, DSA, EDSA, ED25519
Creating SSH2 RSA key; this may take some time ... ....
Creating SSH2 DSA key; this may take some time ...
....
Creating SSH2 ED25519 key; this may take some time ...
et sont stockées en /etc/ssh :
$ ls /etc/ssh/ssh_host_*
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
L'ouverture d'une connexion s'effectue depuis le client au moyen de la commande :
$ ssh user@host -p port # équivalent à ...
$ ssh -l user host -p port
user est le nom d'utilisateur sur le PC serveur
host est l'adresse ip du PC serveur ou son d'hôte qualifié sur internet ou dans le cas d'un réseau local, le nom d'hôte (hostname) s'il est unique sur le réseau et déclaré dans le fichier /etc/hosts
port est le numéro de port ssh. Par défaut, le port est 22 et dans ce cas, il n'est pas nécessaire d'utiliser l'option -p
$ ssh -X user@debian
Dans l'exemple qui suit, le nom d'hôte de la machine à contrôler est rpi1 et a été déclaré dans le fichier /etc/hosts du client et du serveur
$ sudo echo "192.168.0.24 rpi1 >>/etc/hosts"
Vérifier que la machine est atteignable
$ ping -c 5 rpi1 |grep "packet loss"
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
Vérifier que le port 22 est atteignable
$ nmap -p 22 rpi1 |grep ssh
22/tcp open ssh
Demander l'ouverture de la connexion avec (on suppose que le nom d'utilisateur sur le serveur est pi)
$ ssh -l pi rpi1
Lors de la première connexion, il est demandé d'approuver la connexion sur la base de l'empreinte de la clé du serveur
The authenticity of host 'rpi1 (192.168.0.19)' can't be established.
ECDSA key fingerprint is SHA256:AnnOhmu1ENY3BljAKFY/eQPl1EceMVjVmpYRVEE8ga0.
Are you sure you want to continue connecting (yes/no)?
Depuis une console, sur le serveur, il est possible de faire afficher l'empreinte de la clé du serveur
$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:AnnOhmu1ENY3BljAKFY/eQPl1EceMVjVmpYRVEE8ga0 root@raspberry (ECDSA)
accepter la connexion
...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rpi1,192.168.0.19' (ECDSA) to the list of known hosts.
Connection closed by 192.168.0.19 port 22
Relancer la connexion et fournir le mot de passe utilisateur sur le PC serveur. Le prompt de la console devient celui du serveur
$ ssh -l pi rpi1
pi@rpi1's password:
.....
pi@raspberrypi:~
Il est possible de passer en "root" avec su ou sudo
pi@raspberrypi:~:~$ su
Mot de passe :
root@raspberry:/home/pi#
pi@raspberrypi:~$ exit
déconnexion
Connection to rpi1 closed.
La commande scp effectue le pendant de la copie cp entre une machine locale et une machine distante à travers le protocole ssh
$ scp ~/Musique/test pi@rpi1:~/Musique
$ scp -r Musique/* pi@rpi1:Musique
rsync est utilisable à travers le protocole ssh et doit-être installé sur le serveur et le client
$ rsync -av ~/Musique/ pi@rpi1:~/Musique --progress
Pour obtenir la liste des adresses des machines du réseau local, dont le port 22 est ouvert, on peut utiliser nmap
$ ip route |grep link
169.254.0.0/16 dev wlp0s20f3 scope link metric 1000
192.168.0.0/24 dev wlp0s20f3 proto kernel scope link src 192.168.0.18 metric 600
$ nmap -p 22 192.168.0.0/24 --open
Starting Nmap 7.70 ( https://nmap.org ) at 2020-11-05 10:52 CET
Nmap scan report for rpi1 (192.168.0.19)
Host is up (0.019s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap scan report for rpi2 (192.168.0.20)
Host is up (0.018s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 256 IP addresses (10 hosts up) scanned in 3.73 seconds
Dans le cas présent, 2 adresses ont été trouvées, correspondant aux connexions de la machine dont on veut prendre le contrôle l'une par connexion ethernet filaire, l'autre par connexion wifi, ce que l'on peut vérifier sur la machine serveur
$ ip route |grep link
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.19 metric 202
192.168.0.0/24 dev wlan0 proto dhcp scope link src 192.168.0.20 metric 303