OpenSSH : la sécurité avant tout

L’Atelier du Vendredi du 26 février 2016 avait pour thème « OpenSSH ». Cela a été l’occasion de présenter ce célèbre protocole de connexion sécurisée à ceux qui ne le connaissait pas encore et d’échanger divers trucs et astuces sur son utilisation.

Logo de OpenSSH, par le projet OpenBSD
Chiffré de bout en bout !

Pour initier une connexion :
$ ssh USER@SERVER
USER est le nom d’utilisateur distant et SERVER l’adresse IP, le nom de domaine ou le nom d’hôte du serveur.

Pour générer une paire de clefs :
$ ssh-keygen
La clef publique se trouve alors dans ~/.ssh/id_rsa.pub.

Pour envoyer la clef publique par SSH au serveur :
$ ssh-copy-id USER@SERVER

Pour exécuter une commande à distance :
$ ssh USER@SERVER COMMANDE

Pour exécuter une application graphique à distance :
$ ssh -X USER@SERVER COMMANDE

Pour créer un tunnel chiffré depuis le client vers le serveur :
$ ssh -L ADRESSE_LOCALE:PORT_LOCAL:ADRESSE_DISTANTE:PORT_DISTANT USER@SERVER
Exemple :
$ ssh -L 10.2.0.3:5564:10.4.0.2:3468 USER@10.4.0.3

Schéma
Schéma de tunnel SSH de B à C vers D emprunté par A.

Pour créer un tunnel chiffré depuis le serveur vers le client :
$ ssh -R ADRESSE_DISTANTE:PORT_DISTANT:ADRESSE_LOCALE:PORT_LOCAL USER@SERVER
Exemple :
$ ssh -R 10.4.0.3:5130:10.2.0.2:2100 USER@10.4.0.3

Schéma
Schéma de tunnel SSH de C à B vers A emprunté par D.

Pour copier un fichier du client vers le serveur :
$ scp -r /CHEMIN/VERS/LE/FICHIER/LOCAL USER@SERVER:/CHEMIN/VERS/LA/DESTINATION/

Pour copier un dossier du client vers le serveur :
$ scp /CHEMIN/VERS/LE/DOSSIER/LOCAL/ USER@SERVER:/CHEMIN/VERS/LA/DESTINATION/

Pour copier un fichier du serveur vers le client :
$ scp USER@SERVER:/CHEMIN/VERS/LE/FICHIER/DISTANT /CHEMIN/VERS/LA/DESTINATION/

Pour copier un fichier d’un serveur vers un autre :
$ scp USER1@SERVER1:/CHEMIN/VERS/LE/FICHIER/DISTANT USER2@SERVER2:/CHEMIN/VERS/LA/DESTINATION/

Pour monter localement un dossier distant :
$ sshfs USER1@SERVER1:/CHEMIN/VERS/LE/DOSSIER/DISTANT/ /CHEMIN/VERS/LE/POINT/DE/MONTAGE/

Pour démonter un dossier distant monté localement :
$ fusermount -u /CHEMIN/VERS/LE/POINT/DE/MONTAGE/