ssh - Connexion et recopies sécurisées ssh scp rsync

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

1 - Installation

La version installée est openssh, implémentation libre du protocole ssh.

1.1 - Client ssh

$ sudo aptitude install openssh-client
$ ssh -V
OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 Sep 2019
$ ls /etc/ssh/
ssh_config

1.2 - Serveur ssh

1.2.1 Installation

$ sudo aptitude install openssh-server
$ ls -d /etc/ssh

1.2.2 Service ssh

$ 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
....
$ sudo systemctl start ssh.service
$ sudo systemctl stop ssh.service
$ sudo systemctl enable ssh.service
$ sudo systemctl disable ssh.service

1.2.3 Clés d'identification

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

2 - ssh

2.1 - Principe

$ ssh user@host -p port  # équivalent à ...

$ ssh -l user host -p port
$ ssh -X user@debian

2.2 - Ouverture de la connexion

$ sudo echo "192.168.0.24 rpi1 >>/etc/hosts"
$ ping -c 5 rpi1 |grep "packet loss"
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
$ nmap -p 22 rpi1 |grep ssh
22/tcp open ssh
$ ssh -l pi rpi1
$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:AnnOhmu1ENY3BljAKFY/eQPl1EceMVjVmpYRVEE8ga0 root@raspberry (ECDSA)
...
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
$ ssh -l pi rpi1
pi@rpi1's password:
.....
pi@raspberrypi:~
pi@raspberrypi:~:~$ su
Mot de passe :
root@raspberry:/home/pi#
pi@raspberrypi:~$ exit
déconnexion
Connection to rpi1 closed.

3 - scp

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

4 - rsync

rsync est utilisable à travers le protocole ssh et doit-être installé sur le serveur et le client

$ rsync -av ~/Musique/ pi@rpi1:~/Musique --progress

Annexe - Recherche des machines sur un réseau local

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