[TUTO] Une autre vision du SSH

Proposer ou rechercher un tutoriel concernant le Raspberry Pi

Modérateur : Francois

Répondre
maxty01
Modérateur
Messages : 790
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

[TUTO] Une autre vision du SSH

Message par maxty01 » dim. 30 nov. 2014 23:01

Bonsoir à toutes et à tous,

Avant de commencer, lisez cette article et prenez conscience des dangers d'un SSH mal sécurisé.

Vous ne le savez peut-être pas, mais le SSH ne sert pas qu'a se connecter sur un serveur/RPI.
En effet, les commandes SSH ont de multiples options qui permettent beaucoup d'actions.
Nous allons les voir ensemble.

Cette partie s'adresse principalement aux utilisateurs de Linux/UNIX/Mac os.
Une partie pour Windows sera disponible dans les prochains jours.


Avec la commande SSH il est possible d’exécuter, non pas un Shell, mais une commande, une suite de commandes, un script distant, ...

Nous avons tous l'habitude d'utiliser la commande comme ceci :

Code : Tout sélectionner

$ ssh [user@]host
Si vous utilisez une paire de clés SSH, aucun mot de passe vous sera demandé par votre serveur/RPI lors de l'établissement de la connexion,
sauf si vous avez configuré vos clés avec un mot de passe pour les déverrouillée, mais dans ce cas, c'est votre client SSH local qui intervient.
Aussi, pour votre information, [user@] est une option pour "ssh"

Il est possible de passer en paramètre la commande que l'on souhaite exécuter sur le serveur/RPI :

Code : Tout sélectionner

$ ssh pi@yourPiAdress date
Sun Nov 30 18:24:10 CET 2014
$
Cette commande s’exécute sur votre serveur/RPI, mais est affichée sur votre terminal, comme une commande traditionnelle.
Une fois terminée, nous récupérons la main sur votre terminal local.

Un autres exemple, demandons au programme "service" de redémarrer notre service NTP de notre serveur/RPI distant (sans clés SSH):

Code : Tout sélectionner

$ ssh pi@yourPiAdress "sudo service ntp restart"
pi@yourPiAdress's password: 
Stopping NTP server: ntpd.
Starting NTP server: ntpd.
$
ou la même demande exécutée en appelant le script de démarrage du service NTP (avec clés SSH) :

Code : Tout sélectionner

$ ssh pi@yourPiAdress "sudo /etc/init.d/ntp restart"
Stopping NTP server: ntpd.
Starting NTP server: ntpd.
$
Une fois la commande exécutée, nous récupérons la main sur votre terminal local.

Magique, non ?

Vous voulez encore un autre tour ? Oui ?
C'est parti pour un second tour !

Je vais vous montrer que d'autres programmes utilisent le SSH pour travailler.

C'est le cas de la commande "scp".
Tout le monde (ou presque) à déjà utilisé la commande "cp", pour copier un fichier d'un endroit à un autre.
Et bien ici, c'est la même chose, mais entre machine via le SSH.

La syntaxe est identique à la commande "cp" :

Code : Tout sélectionner

$ cp <source> <destination>
en pratique :

Code : Tout sélectionner

$ cp /premier/dossier/fichier.txt /second/dossier/
Mais avec une petite subtilité pour scp puisque nous devons spécifier l'utilisateur ainsi que l'adresse de votre serveur/RPI :

Code : Tout sélectionner

$ scp <[user@][host:]source> <[user@][host:]destination>
en pratique :

Code : Tout sélectionner

$ scp /premier/dossier/fichier.txt pi@yourPiAdress:/second/dossier/
Dans ce cas, nous avons copier un fichier "fichier.txt" depuis le dossier "/premier/dossier/" de notre ordinateur vers le dossier "/second/dossier/" notre serveur/RPI avec l'utilisateur "pi".

Il est possible de copier un fichier depuis notre serveur/RPI vers notre ordinateur :

Code : Tout sélectionner

$ scp pi@yourPiAdress:/premier/dossier/fichier.txt /second/dossier/
Dernier possibilité, il est possible de copier un fichier depuis un serveur/RPI vers un autre serveur/RPI, en passant par notre ordinateur.

Code : Tout sélectionner

$ scp pi@yourFirstPiAdress:/premier/dossier/fichier.txt pi@yourSecondPiAdress:/second/dossier/
Tout comme avec "cp, il est également possible avec scp de copier une dossier vers un serveur/RPI avec l'option "-r" (r pour récursive) :

Code : Tout sélectionner

$ scp -r /home/pi pi@yourPiAdress:/tmp/
Et nous retrouverons les fichiers du dossier "pi" dans le dossier "/tmp/pi/" de notre serveur/RPI.

Magique, non ?

Hop Hop Hop, ou allez-vous ?
C'est pas fini pour ce tour !

Voici, qui arrive, la commande rsync, qui utilise également le SSH pour travailler.
Croyez moi sur parole, cette commande est tellement PUISSANTE, qu'elle fera l'objet d'un article rien que pour elle. Promis !
Pour vous donner une idée : c'est, sans aucun doute, la commande la plus utilisée pour faire des backups sous Linux.

Je vais donc voir avec vous le strict minimum qu'il faut savoir pour débuter avec cette commande.
La première chose qu'il faut savoir avec cette commande c'est qu'elle fait, à quelques détails près, la même chose que scp, mais en mieux.

En effet, elle ne fait pas que copier des fichiers "bêtement", elle compare les fichiers de la source avec ceux de la destination,
si les fichiers de la source sont plus récents, ils seront copiés à la destination, dans le cas inverse, rien ne sera fait.
Ce comportement est celui par défaut de la commande, mais peut-être modifié via les nombreuses options de la commande.
Pour vous donner une nouvelle idée sur la commande : Il y a pas moins de "2200" lignes dans le manuel de rsync contre 133 pour "scp".

Pour l'utiliser, il faut comprendre, comme pour scp, la syntaxe utilisée :

Code : Tout sélectionner

$ rsync <[user@][host:]source> <[user@][host:]destination>
Tout comme "scp", "rsync" est capable de transferer une fichier depuis votre ordinateur vers un serveur/RPI distant :

Code : Tout sélectionner

$ rsync /premier/dossier/fichier.txt pi@yourPiAdress:/second/dossier/
ou l'inverse :

Code : Tout sélectionner

$ scp pi@yourPiAdress:/premier/dossier/fichier.txt /second/dossier/
Mais je dois avouer que ce n'est pas son utilité principale.
Comme je vous l'ai dis plus haut, elle permet de synchroniser des dossiers entre eux.

Prenons un exemple : Nous développons un site web sur notre ordinateur, mais le service apache se trouve sur notre serveur/RPI,
nous devons donc synchroniser notre dossier avec celui de notre serveur/RPI :

Code : Tout sélectionner

$ rsync -r /home/user/www-dev/ pi@yourPiAdress:/var/www/
Avec cette commande, nous synchronisons le contenu de notre dossier local "/home/user/www-dev/" avec le dossier distant "/var/www/".
Si vous êtes observateur, vous aurez remarqué que j'utilise l'option "-r" pour la récursivité.

Si vous utilisez cette commande, vous allez observer que celle-ci parle très peu.
Vous pouvez lui demander d'être plus explicite avec l'option "-v".

Si vous trouvez que ce n'est pas encore assez à votre goût, vous avec encore la possibilité d'utiliser d'autres options pour augmenter la lisibilité de la commande "rsync".
Un exemple de commande suffisamment claire dans les informations qu'elle donne :

Code : Tout sélectionner

$ rsync -vrh --progress /home/user/www-dev/ pi@yourPiAdress:/var/www/
Ceci termine le "petit" tour d'horizon de la commande "rsync".

Attendez !
La visite n'est pas encore finie !

Je dois encore vous apprendre à utiliser votre service SSH comme un "petit" VPN ...
Ça vous tente de bypasser le filtrage de votre entreprise, de rentrer chez vous via votre serveur/RPI.
Ce qu'il vous faut c'est un service SSH qui tourne, un client SSH, et d'un ... Firefox ...

Ha, je vois que vous revenez ...

Et oui, il est possible d'utiliser le SSH comme un VPN :

Code : Tout sélectionner

$ ssh -D 127.0.0.1:8080 pi@yourPiAdress
Avec cette option, vous ouvre un "SOCKS" sur votre client local (127.0.0.1) sur le port 8080.

Il ne vous reste plus qu'à configuré votre Firefox pour utiliser le "SOCKS" que vous venez de créer.

Pour cela, rien de plus simple : dans les "préférences" de Firefox, allez dans l'onglet "Avancé",
ensuit vous allez trouver un autre onglet "Réseau", vous y trouverez un bouton "Paramètres...",
celui-ci va vous ouvrir une dernière fenêtres, cochez l'option "Configuration manuelle du proxy",
enfin, remplissez les champs "Hôte SOCKS :" par votre adresse "127.0.0.1" et "Port :" par le port choisi, "8080" dans notre cas.
Appuyer sur le bouton OK, et c'est parti, vous naviguer depuis chez vous.

Une dizaine de tutos sur le net explique, image à l'appui, comment configurer un proxy socks.

Magic non ?

Hé ! Restez assis !
C'est pas fini !

Bon ok, je ne vous apprendrai pas a déporter une fenêtre graphique grâce au SSH ...

Tiens donc, il me semblais que vous deviez partir ...

Effectivement, il est possible de déporter une interface graphique grâce au SSH et de façons très simple, une seul option suffit :

Code : Tout sélectionner

$ ssh -X pi@yourPiAdress
Avec l'option "-X" vous donnez accès a votre serverX (le système qui permet l'affichage sur un Linux) à votre serveur/RPI distant.
A l'intention des utilisateurs Mac OS: L'option "-X" de votre client ssh est utilisable à condition d'avoir lancer un serveur X sur votre Mac!

Vous pouvez par exemple configurer votre carte wifi avec l'outil graphique "/usr/sbin/wpa_gui" comme ceci :

Code : Tout sélectionner

$ ssh -X pi@yourPiAdress /usr/sbin/wpa_gui
Pour l'anecdote, j'ai essayé la commande, et au final, l'outil "wpa_gui" s'est greffé dans ma barre de notification gnome de mon portable alors que, depuis cette application, je pouvais géré le wifi de mon RPI B+.
Aussi, n'essayez pas de lancer "startx", ca risque de ne pas fonctionner.

Voila, J'espère vous avoir donné une autre vision du service SSH de votre serveur/RPI.

Si vous avez des questions, n'hésitez pas.

Je vous souhaite à toutes et à tous, un bon amusement.
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

EVOTk

Re: [TUTO] Une autre vision du SSH

Message par EVOTk » lun. 1 déc. 2014 02:23

Salut et merci pour ce super article très intéressant ;)

maxty01
Modérateur
Messages : 790
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

Re: [TUTO] Une autre vision du SSH

Message par maxty01 » lun. 1 déc. 2014 21:36

Bonsoir,

J'avoue qu'un p'tit merci, ça fait pas de mal.

Bonne lecture,
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: [TUTO] Une autre vision du SSH

Message par vague nerd » mar. 2 déc. 2014 13:04

Et bien je m'associe à evo et domi pour un nouveau MERCI !

Cordialement.
Cordialement,

Vague Nerd

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: [TUTO] Une autre vision du SSH

Message par domi » mar. 2 déc. 2014 20:21

+1,

Merci beaucoup pour cet investissement.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Veloce
Messages : 79
Enregistré le : sam. 24 janv. 2015 20:12

Re: [TUTO] Une autre vision du SSH

Message par Veloce » lun. 26 janv. 2015 15:49

Merci Maxty pour ce tuto très instructif.

J'aurais une question dur rsync : dans ma compréhension ça sert à répliquer un répertoire A vers un répertoire B, mais bêtement.
C'est-à-dire que:
- si je crée un fichier sur A, il va être copié sur B.
- si j'efface un fichier sur A, il va être effacé sur B.
- si je crée un fichier sur B, il va être effacé puisqu'il n'existe pas sur A, et que c'est A la source.

Est-ce que tu sais si il y a un moyen de détecter les changements, pour le rendre plus intelligent ?
(bon c'est vrai pour devenir plus intelligent y'a qu'à lire les man-pages :oops: )
Est-ce que tu sais si on peut limiter la bande passante pour ne pas monopoliser le réseau ?

Merci

Veloce

maxty01
Modérateur
Messages : 790
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

Re: [TUTO] Une autre vision du SSH

Message par maxty01 » mer. 28 janv. 2015 00:24

Bonsoir,

@Veloce,
Non, rsync est très très très très très .... paramétrable.

Si tu effaces le fichier sur A, il ne sera pas effacé sur B, sauf si tu lui demande de façon explicite.
Idem pour la création de fichier sur B qui n'existe pas sur A, il ne sera pas effacer.
Par contre, si le fichier porte le même nom sur A et B, il sera remplacé sur B par la version de A.

Rsync, dans sa version basique, permet de faire une copie avec synchro intelligente des fichiers présent sur A vers B.
Seuls les fichiers qui ont été modifiés, ou tout simplement différents, seront transférés.

Je t'invite à faire le test en local sur ton RPI entre un dossier A et B.
rsync peut très bien rester sur la même machine et pas obligatoirement passer sur le réseau.

Pour te donner une idée de son niveau de paramétrage, j'effectue mes backups journalier avec un (bête rsync).
Mais pas n'importe quel backup, Rsync est capable de faire un style de "timelapse", je suis donc capable de récupérer sur mon NAS un fichier effacé sur mon serveur après 31 Jours (selon la rétention souhaitée).
Et cela sans prendre la place de 31 Backups Complets, car Rsync ne copie que les fichiers qui ont été modifiés et crée un lien avec les fichiers qui n'ont pas été modifiés.
Donc si j'ai un (petit/moyen/gros) fichier qui n'a pas été modifié depuis 31 Jours, il existe dans mes 31 dossiers de backup, mais n'est réellement présent qu'une fois sur le disque et ne prend donc la place que d'un seul (petit/moyen/gros) fichier ...

En ce qui concerne l'utilisation de bande passante, il est possible de compressé le flux réseau ... mais la limitation de bande passante sur le réseau se règle grâce au QOS (Quality Of Service), mais je ne pense pas que ton réseau en soit capable.

J'espère avoir répondu à tes questions, si tu en as d'autres, n'hésite pas.
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

Veloce
Messages : 79
Enregistré le : sam. 24 janv. 2015 20:12

Re: [TUTO] Une autre vision du SSH

Message par Veloce » mer. 28 janv. 2015 10:30

Super intéressant, merci.

j'ai déjà perdu un disque dur, mais à l'époque c'était un 80 Go, et je n'ai pas perdu grand chose puisque je sauvegardais tout sur disquettes.

Maintenant, les disques durs font 1 To, ils sont pleins de photos de famille, de vidéos, de documents importants... et en plus au lieu d'un
seul ordinateur à la maison, maintenant il y en a plusieurs, avec les portables, la box, et les Raspberry...

Surtout les Raspberry : on passe des heures à développer un programme en C, sur une machine qui peut cramer sa carte SD sans crier gare.
Alors je recopie de temps en temps sur un disque USB, mais c'est sûr qu'une sauvegarde ce serait mieux, pour garder un historique.

Je vais donc étudier ça de plus près. Tu fais bien de préciser qu'on peut faire des essais en local, c'est évident quand on le sait mais je
n'y aurais pas pensé ! :D

Merci

Veloce

Répondre

Retourner vers « Tutoriels »