Le protocole SSH et son utilisation Client / Serveur
SckyzO | 4 juillet 2007 | 17:20Certains connaissent le protocole ssh, et pour d’autre, cela est totalement abstrait.
Pour info, le procole SSH (Secure Shell) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite toutes les trames sont chiffrées. Il devient donc impossible d’utiliser un sniffer pour voir ce que fait l’utilisateur ou pour récupérer login ou mot de passe. Le protocole SSH a été conçu avec l’objectif de remplacer les différents programmes rlogin, telnet et rsh.
Ce qui va nous interresser dans ce protocole, c’est son utilisation entre un client et un serveur. En exemple concret, chez moi j’ai un serveur Debian, et un pc client sous Ubuntu. J’ai en plus de ça un ordinateur portable lui aussi sous Ubuntu. La dessus, il peut m’être nécessaire parfois d’accéder à mon serveur avec l’un de mes ordinateurs pour diverses raisons (récupérer des fichiers/dossiers, travailler sur le serveur à distance, lancer une application, …)
Tout dabord, il faut séparer les 2 parties, la partie Serveur et la partie cliente.
Le Serveur :
Coté Serveur, l’installation de SSH se fait en ligne de commande (pour Ubuntu et pour Debian)
sudo apt-get install openssh-server
La gestion du serveur ssh peut se faire comme ceci :
$ sudo /etc/init.d/ssh start
$ sudo /etc/init.d/ssh stop
$ sudo /etc/init.d/ssh restart
(une fois installer, le service ssh démarre automatiquement au démérage de la machine)
Le fichier de configuration du serveur SSH
Par défaut, le fichier de configuration se trouve dans /etc/ssh/sshd_config. Vous pouvez l’éditer via Gedit, ou nano pour les habitués.
sckyzo# sudo gedit /etc/ssh/sshd_config
La configuration de base de Ubuntu est suffisante, mais un peu minimaliste pour les paranos. Certaines options sont modifiables pour augmenter la sécurité du serveur (qui est déjà très sécurisé, il faut le signaler).
PermitRootLogin yes
Cette option permet de se connecter avec un compte Root. Pour ma part, j’ai mis cette option sur no
#Banner /etc/issue.net
Vous pouvez décommenter (c’est-à-dire enlever le #) cette ligne. Effet : lorsque vous essayez de vous connecter à votre serveur par SSH, le fichier /etc/issue.net est affiché (à vous de le personnaliser).
#MaxStartups 10:30:60
Vous pouvez aussi décommenter cette ligne, effet : le 10 représente le nombre de connexions acceptées sans qu’un utilisateur ait réussi à s’identifier, si cela passe au dessus de 10, il y a 30% de chances que les suivantes soient bloquées, et ce pourcentage augmente linéairement jusqu’à 100% lorsque le full est atteint, à 60 connexions. Trés utile pour eviter ce genre de désagrément.
AllowUsers sckyzo brunto nahuel
Cette ligne spécifie les logins des utilisateurs qui sont autorisés à se connecter (ici seuls sckyzo, brunto et nahuel).
La gestion du SSH coté client
Voila, maintenant, vous avez un serveur ssh en place. Pour y accéder, il faudra soit le faire par interface graphique grace à nautilus (tapez dans la barre d’adresse : ssh://user@IP), soit grace à un terminal, à distance. Pour se connecter, ouvrir un terminal et taper :
sckyzo# ssh [user]@[adresse ip] [-p numéro_de_port]
Ce qui donnera sur mon ordinateur par exemple :
sckyzo# ssh sckyzo@10.1.31.200
(10.1.31.200 est mon adresse réseau local, mais le SSH fonctionne aussi par Internet. En configurant bien mon routeur coté serveur, c’est à dire en ouvrant le port adéquate - par défaut le port 22 en TCP/IP).
Là nous aurons donc accès à notre serveur en ligne de commande, comme si nous étions dessus, sauf que vous êtes à distance. De plus, le protocole ssh utilise un cryptage, contrairement au telnet, ce qui permet de “coder” les “discussions” entre serveur et client. Vous pouvez naviguer dans les dossiers, gérez votre serveur à distance, installez des programmes, …
Je me sers du ssh pour régler les serveurs, chez moi ou en entreprise. Je prend la main à distance, je fais des mises à jour, je récupère mes logs, je modifie, efface, ajoute des données …
Bref, l’utilisation de ssh est très pratique, et rapidement il devient indispensable, et son avantage majeur est le cryptage des données (login, mot de passe, données qui transitent) utilisant un cryptage 1024 bits voir 2048.
De ce fait, il est possible de faire transiter des données, comme récupérer un fichier logs, un fichier mp3/divx, tous les fichiers que vous voulez. Ceci va se faire à l’aide de la commande scp
Le Protocol SCP (Secure Copy)
Pour récupérer un fichier sur un pc distant, nous auront donc :
sckyzo# scp [user]@[adresse ip]:/repertoire/fichier.extension /repertoire
[-P port, -R pour importer du dossier au lieu d'un fichier]
La syntaxe est simple, tapez la en fonction de ce que vous voulez avoir, par exemple, pour récupérer un fichier, je vais me dire :
je veux récupérer (scp) le fichier de mon serveur (user@ip:/chemin/fichier) sur mon poste actuel (/chemin) (pour plus d’aide : man scp)
Ceci va donner chez moi :
sckyzo# scp sckyzo@10.1.31.253:/home/server31/download/images/ubuntu.jpg /home/sckyzo/images/Linux
Dans l’expemple ci dessus, je vais donc copier le fichier ubuntu.jpg de mon serveur vers le dossier /home/sckyzo/images/Linux de mon pc client
Pour récupérer un dossier, j’aurais la syntaxe :
sckyzo# scp -R sckyzo@10.1.31.200:/home/server31/music/Jimi Hendrix /home/sckyzo/music
Dans l’exemple ci dessus je vais donc copier le dossier music de mon serveur vers mon poste local dans le dossier /home/sckyzo/music.
Pour envoyer un fichier d’un poste client vers un autre poste ou un serveur, il faudra utiliser la même commande, mais en inversant les commandes.
sckyzo# scp /home/sckyzo/ubuntu.jpg sckyzo@10.1.31.253:/home/server31/picture
Dans l’exemple ci dessus, je vais envoyer le fichier ubuntu.jpg, de mon poste vers le serveur.
Vous l’aurez compris, la commande scp est très flexible, et permet donc de transférer des données, de manière cryptés et sécurisés d’un serveur à un client, et d’un client sur un serveur.
Petite parenthèse, pour le monde Windows, il existe 2 logiciels permettant de ce connecter à du ssh. Le premier est PUTTY (download putty), celui ci va permettre de se connecter en ligne de commande à un serveur ssh. Le seconde est WinSCP qui est un client SFTP graphique pour Windows. Il utilise SSH et est open source. Le protocole SCP est également supporté. Le but de ce programme est de permettre la copie sécurisée de fichiers entre un ordinateur local et un ordinateur distant.
Mais l’utilisation du protocole ssh peut être aussi bien plus “épanuissante”, grace au ssh forwarding.
Cette option va permettre de lancer une application à interface graphique d’un ordinateur distant sur l’écran de votre ordinateur local. Difficile à comprendre quand on à jamais testé, mais pour parler un peu plus technique, on va dire que cette option permet de balancer l’affichage du serveur X vers notre pc client.
Il faut configurer l’option “forwarding” sur le serveur ET sur le client :
sudo nano /etc/ssh/sshd_config
et vérifiez que l’option X11Forwarding est sur yes
Ensuite, de votre ordinateur client, lancer une connexion ssh avec l’option -X
sckyzo# ssh -X sckyzo@10.1.31.253 sckyzo@10.1.31.253's password:
ainsi vous aurez la main en ssh sur votre serveur. Mais l’avantage du forwarding est que si vous tapez par exemple ‘gaim‘ dans votre connexion ssh, le logiciel se lancera, chez vous, et apparaitra sur votre écran. Pour ma part, je me sers beaucoup de cette options pour lancer klibido quand je suis pas chez moi et que j’ai besoin de quelque chose, ou gaim, ou thunderbird, ou amarok pour écouter la musique de chez moi sur mon ordinateur. Bref, le x forwarding à beaucoup d’utilité, mais nécessite une bonne connexion entre les machines, ainsi, préférez utiliser cette option sur un reseau local, mais bon, moi le premier l’utilise en passant par le net
Dans une seconde partie j’expliquerai comment mettre en place une sécurité par certificat d’authentification (authentification par clé publique) et comment tunneliser une connexion ssh
Aucun tag pour cet article.









Super tuto, comme à chaque fois... Pour ma part j'utilise également
Nicolargo | 4 juillet 2007 | 22:19Super tuto, comme à chaque fois…
Pour ma part j’utilise également le protocole SSH avec Fuse, qui me permet de monter un répertoire distant de manière sécurisé.
Le tuto est par ici.
Nico, le nom de ta page s'appelle : Monter une
SckyzO | 4 juillet 2007 | 23:07Nico, le nom de ta page s’appelle : Monter une répertoire distant …
hihi
en tout cas merci
Plutot que scp, je conseille l'utilisation de lftp comme ceci
Pingoomax | 5 juillet 2007 | 1:21Plutot que scp, je conseille l’utilisation de lftp comme ceci :
lftp sftp://user@serveur
Petite note : il ne faut pas confondre sftp et ftps.
ftps, c’est du ftp securisé par ssl,
sftp, c’est les commandes de ftp implementées dans ssh
Donc en utilisant lftp sftp://user@server, il suffit que le demon sshd tourne et on a l’equivalent d’un serveur ftp sécurisé.
“discutions” -> "discussions"
Olivier | 5 juillet 2007 | 9:14“discutions” -> “discussions”
Corrigé ;)
Nicolargo | 5 juillet 2007 | 9:41Corrigé
corrigé aussi :P
SckyzO | 5 juillet 2007 | 11:18corrigé aussi