IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Pour aller plus loin avec la ligne de commande

Tout ce que vous avez toujours voulu savoir sur Unix sans jamais oser le demander


précédentsommairesuivant

4. Chapitre 4 - Communiquer !

Report bugs to bug-groff@prep.ai.mit.edu.
Include a complete, self-contained example
that will allow the bug to be reproduced,
and say which version of groff you are using.
Extrait du manuel de groff.

Le protocole réseau TCP/IP a été intégré au début des années 80, dans la branche BSD d'unix. On trouve donc parmi les utilitaires standard des outils axés sur la communication entre utilisateurs, le transfert de fichiers, l'accès à des machines distantes, etc. Ce chapitre propose tout d'abord un aperçu du concept d'adresse IP et du système de nommage des machines sur Internet (DNS). Il présente ensuite les outils classiques de communication que sont ftp, telnet, rlogin et ssh. Après que les outils réseau propres à unix ont été passés en revue, le chapitre est clos par la présentation des utilitaires de base pour envoyer des mails et pour accéder à des ressources localisées sur le Web.

4-1. Concepts à connaître

Pour comprendre de quoi il est question dans ce chapitre, il est nécessaire de connaître quelques concepts liés à la technologie d'un réseau.

4-1-1. Notion d'adresse IP

L'adresse IP (pour Internet Protocol) est un ensemble de quatre nombres destiné à identifier de manière univoque une machine sur un réseau local et sur Internet. Cette adresse se compose de quatre octets de la forme :

  • xxx.yyy.zzz.ttt

Par exemple : 172.30.4.78 est une adresse IP. On peut donc potentiellement référencer 256256256256 = 2564 = 4294967296 soit plus de quatre milliards de machines(57).

Aujourd'hui les réseaux utilisent IP version 4 pour laquelle les adresses sont codées sur 4 octets comme expliqué ci-dessus. Cependant, bien que quatre milliards d'adresses peuvent paraître suffisantes pour identifier chacune des machines, on arrive aujourd'hui à une pénurie. C'est la principale raison pour laquelle le protocole IP dispose aujourd'hui d'une version 6 dans laquelle les adresses sont codées sur 16 octets. On peut donc adresser : 25616 340282366920938463463374607431768211456 machines. 

4-1-2. Notion de DNS

De manière à éviter aux utilisateurs d'un réseau de se souvenir des adresses IP des machines, un système de nommage a été mis en place depuis presque vingt ans. Ce système s'appelle le Domain Name System ou DNS. Il utilise un protocole qui assure la traduction d'une adresse IP en un nom de machine (ftp.lip6.fr par exemple) et inversement. Le protocole repose sur les idées suivantes :

  • les machines du réseau sont regroupées en domaine ;
  • ces domaines sont organisés en arborescence ;
  • chaque sous-domaine est géré par un serveur responsable des machines qu'il contient. On est donc en présence d'une base de données décentralisée ;
  • un système de cache est utilisé pour limiter le trafic réseau.

Le domaine « racine » est noté « . » ; le point sert également de séparateur de sous-domaine (à l'instar du / pour les répertoires). Sous le domaine racine existe un certain nombre de sous-domaines :

  • un domaine pour chaque pays, par exemple fr pour la France, de pour l'Allemagne, es pour l'Espagne, etc.
  • le domaine org pour les organisations à but non lucratif (par exemple le célèbre www.gnu.org) ;
  • le domaine edu regroupant initialement les universités américaines (par exemple, le serveur web de l'université de Chicago est www.uchicago.edu) ;
  • le domaine net regroupant les machines dont le contenu est axé sur le réseau ;
  • le domaine com destiné à héberger les sites dont le but est de vous faire acheter des marchandises virtuelles ou non(58) ;

Chacun de ces domaines peut ensuite contenir des sous-domaines, pouvant également contenir des sous-domaines, etc. L'ensemble forme donc une arborescence dont la racine est le domaine « . », chaque nœud est un sous-domaine, et chaque feuille est une machine(59) ayant une adresse IP donnée. Par exemple, sur la figure 4.1, la machine

Image non disponible
Figure 4.1 - Arborescence de domaine DNS.

ayler appartient au domaine freejazz, lui-même sous-domaine du domaine fr.

Lors d'une requête de connexion sur une machine un système complexe d'interrogation de l'arborescence des serveurs de noms permet d'obtenir la traduction d'un nom vers une adresse IP et inversement (pour les lecteurs intéressés, se référer au manuel de Albitz et Liu (1998)). 

4-1-3. Quelques utilitaires réseau

Suivant les droits que vous auront donnés le ou les administrateurs du site sur lequel vous travaillez, vous aurez la possibilité d'obtenir des informations ayant trait aux adresses et aux noms des machines qui vous entourent. 

4-1-3-a. ping

La commande ping permet, à l'aide d'un protocole particulier(60), d'obtenir un écho d'une machine distante, et ainsi de savoir si elle est susceptible de pouvoir échanger des informations avec la vôtre. Sa syntaxe est la suivante :

  • ping machine_distante

Par exemple

 
Sélectionnez
$ ping ftp.lip6.fr
ftp.lip6.fr is alive
$
4-1-3-b. host

host permet d'obtenir l'adresse IP d'une machine d'après son nom et inversement.

La syntaxe est :

  • host nom_machine ou adr_IP_machine

Par exemple pour la résolution directe :

 
Sélectionnez
$ host ayler.freejazz.fr
ayler.freejazz.fr has address 145.23.6.5
$

Et pour la résolution inverse :

 
Sélectionnez
$ host 145.23.6.5
5.6.23.145. IN-ADDR.ARPA domain name pointer ayler.freejazz.fr
$

On trouvera dans les commandes nslookup et dig des fonctionnalités plus évoluées. La dernière est plus simple d'utilisation que la première et permet une meilleure intégration dans les scripts shell.

4-1-3-c. traceroute

traceroute est un utilitaire permettant d'obtenir la liste des machines relais (passerelles) qui interviennent sur le trajet des informations qui transitent de votre machine vers une machine distante. Sa syntaxe est :

  • traceroute machine_distante

Par exemple :

 
Sélectionnez
$ traceroute www.mekanik.org
1 ghost-lan (182.16.1.254) 1.15 ms * 0.91 ms
2 cisco (183.40.200.65) 2.96 ms 2.90 ms 2.85 ms
3 all.jazz.net (183.38.56.245) 152.64 ms 21.48 ms 21.20 ms
4 jazz.net (183.38.56.105) 25.12 ms 103.28 ms 247.98 ms
5 jazz.net (183.38.56.105) 78.73 ms 25.23 ms 149.62 ms
6 musik.fr (185.230.88.13) 192.93 ms 25.23 ms 149.62 ms
7 intercon.musik.fr (124.57.254.123) 364.57 ms * 56.35 ms
8 all.mekanik.org (185.83.118.1) 144.20 ms 75.32 ms *
9 www.mekanik.org (185.83.118.1) 52.02 ms 45.06 ms 49.07 ms
$
4-1-3-d. nslookup et dig

La commande nslookup permet d'interroger un serveur de nom de manière plus souple que la commande host. Un exemple succinct de session avec nslookup serait :

 
Sélectionnez
$ nslookup
Default Server: dolphy.freejazz.fr  <-------- serveur de nom utilisé
Address: 145.23.65.13
> ayler  <------------------------------------------ qui est ayler ?
Default Server: dolphy.freejazz.fr
Address: 145.23.65.13

Name: ayler.freejazz.fr
Address: 145.23.65.57
$

Un aspect de nslookup qui peut être utile est qu'on peut obtenir la liste des machines qui s'occupent du courrier pour un domaine donné :

 
Sélectionnez
> set query=MX
> zeuhl.org  <----------------------- demande d'info sur un domaine
Default Server: dolphy.freejazz.fr
Address: 145.23.65.13

Non-authoritative answer:
zeuhl.org mail exchanger = zain.zeuhl.org

Authoritative answers can be found from:
zeuhl.org nameserver = wortz.zeuhl.org
wortz.zeuhl.org internet address = 185.83.118.2
$

Ici on demande à nslookup de renvoyer des informations concernant le mail exchanger (MX). La réponse illustre le fait que le DNS utilise un système de cache : il y a en effet une réponse « qui ne fait pas autorité » (non authoritative), celle de dolphy, qui est dans le cache du serveur du domaine local. Il est d'autre part mentionné que l'on peut avoir une réponse « qui fait autorité » (c'est-à-dire digne de confiance) en utilisant expressément le serveur de nom du domaine zeuhl.org dont l'adresse est indiquée.

Le même type de requêtes peut être effectué à l'aide de la commande dig. Par exemple :

 
Sélectionnez
$ dig dolphy.freejazz.fr
[...snipsnip...]
;; ANSWER SECTION:
nephtys.lip6.fr. 21184 IN A 195.83.118.1
;; Query time: 42 msec
;; SERVER: 212.27.53.252#53(212.27.53.252)
[...snipsnip]
$

Pour rendre dig moins bavarde on peut utiliser l'option +short :

 
Sélectionnez
$ dig +short dolpy.freejazz.fr
145.23.65.13
$

La résolution inverse se fait à l'aide de l'option -x :

 
Sélectionnez
$ dig +short -x 185.83.118.2
wortz.zeuhl.org
$

4-2. Quatre grands classiques

Comme toutes les applications réseau, les quatre grands classiques que nous présentons dans cette section (ftp, telnet, rlogin et ssh) utilisent des protocoles d'échange de données entre deux machines distantes, basés sur l'architecture suivante :

  • le client est un programme tournant sur la machine locale. C'est l'utilitaire manipulé par l'utilisateur lui permettant d'effectuer des transferts de données ;
  • le serveur est un programme qui tourne sur la machine distante dont l'existence est généralement ignorée par l'utilisateur.

4-2-1. ftp

ftp (file transfert protocol) permet d'échanger des fichiers entre deux machines du réseau. L'application cliente permet de se connecter sur la machine distante et d'y déposer (upload) ou d'y récupérer (download) des fichiers. Il existe des clients graphiques pour effectuer les transferts, néanmoins il est bon de connaître l'interface basique qui est une interface texte. Sa syntaxe est la suivante :

  • ftp machine_distante

Supposons qu'on dispose d'un compte ftp dont le login est albert avec un mot de passe donné :

 
Sélectionnez
$ FTP ayler.freejazz.fr
Connected to ayler.freejazz.fr
220- Salut garcon !
Name (albert.freejazz.fr:stundher): albert  <--------- saisie du login
331 Password required for ayler.
Password:  <----------------------------------- saisie du mot de passe
230 User albert logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
$

Dans l'échange entre le client et le serveur on notera qu'à chaque requête le serveur répond avec un code défini par le protocole (220 : serveur prêt pour un nouvel utilisateur, 331 : utilisateur ok, mot de passe nécessaire, 230 : utilisateur connecté, etc.)

Une fois connecté on peut se déplacer dans l'arborescence du serveur avec des commandes analogues à celle d'un shell unix (cd, ls, pwd, etc.(61)) :

 
Sélectionnez
ftp> cd transfert  <-------------------------- changement de répertoire
250 CWD command successful.
ftp> dir  <------------------------------------- liste de ce répertoire
200 PORT command successful.
150 Opening ASCII mode data connection for directory listing.
-rw-r----- 1 208 200 20241 Nov 20 2000 data.gz
-rw-r----- 1 208 200 2946 Apr 5 2000 data.txt
226 Transfer complete.
$

Le transfert de fichier peut se faire dans deux modes :

  • ASCII utilisé pour transférer des fichiers « texte » (ne contenant que des caractères ASCII) ; attention c'est généralement le mode par défaut des clients FTP en ligne de commande ;
  • binaire utilisé pour transférer tout autre type de fichier, dans le doute on utilisera ce mode.

Les deux modes de transfert (binaire ou ASCII) permettent de transférer correctement un fichier texte unix vers un système Windows ou MacOs, et inversement. En effet, sur ces trois familles de système (unix, MacOs et Windows) le caractère de saut de ligne est codé différemment : le caractère 13 pour unix, le caractère 10 pour MacOs, et le couple 13 et 10 pour Windows. Le mode ASCII tient compte de ces différences, tandis que le mode binaire récupère chacun des octets sans traitement particulier.

On peut donc transférer un fichier en mode ASCII comme suit :

 
Sélectionnez
ftp> get data.txt  <------------------ récupération du fichier data.txt
local: data.txt remote: data.txt
150 Opening ASCII mode connection for data.txt (2946 bytes).
226 Transfer complete.
2946 bytes received in 2.9 seconds (0.98 Kbytes/s)
$

ou en mode binaire :

 
Sélectionnez
ftp> bin  <---------------------------------- passage en mode binaire
200 Type set to I.
ftp> get data.gz
local: data.gz remote: data.gz
200 PORT command successful.
150 Opening BINARY mode connection for data.gz (20241 bytes)
226 Transfer complete.
20241 bytes received in 8.4 seconds (2.35 Kbytes/s)
$

On peut alors mettre poliment(62) fin à la connexion :

 
Sélectionnez
ftp> bye
221 Goodbye.
$

Les clients ftp disposent généralement des commandes suivantes :

  • mget : pour récupérer plusieurs fichiers en même temps ;
  • prompt : désactive les confirmations demandées à l'utilisateur lors d'un mget ;
  • hash : affiche un « # » tous les kilo-octets pour indiquer l'avancement du transfert ;
  • !cmd : exécute cmd sur la machine locale ;

Notez enfin que toutes ces commandes peuvent être abrégées (e.g. prom à la place de prompt).

Il est courant que des serveurs proposent des fichiers de manière publique. On appelle souvent ces serveurs des « serveurs ftp anonymes », car il n'est pas nécessaire d'avoir un compte pour se connecter sur ces machines. Tous les serveurs distribuant des logiciels libres proposent un accès anonyme. Dans ce cas :

  • le login est : ftp ou anonymous
  • le mot de passe : votre adresse électronique de manière à ce que l'administrateur du site puisse faire des statistiques.
   

4-2-2. telnet et rlogin

telnet et rlogin sont également des protocoles client/serveur et proposent un service de connexion pour utiliser les ressources (processeurs, mémoire, disque, etc.) d'une machine distante. Cette dernière doit exécuter un serveur telnet ou rlogin pour pouvoir proposer le service. Une session se présente alors sous cette forme :

 
Sélectionnez
$ telnet mekanik.zeuhl.org  <-------------- nom de la machine distante
Trying 123.45.67.89...
Connected to mekanik.zeuhl.org (123.45.67.89).
Escape character is '^]'.
Green Hat Linux release 16.0 (Klimt)
Kernel 5.2.5-15smp on an i986
login: stundehr
passwd:  <------------------------------------- saisie du mot de passe
mekanik:~>  <--------------------------- prompt de la machine distante

Notez qu'il faut bien sûr avoir un compte utilisateur sur la machine distante. Une fois connecté on dispose d'un terminal exécutant un shell particulier ; on peut donc passer des commandes au système distant. Pour effectuer des connexions en mode graphique on se reportera au paragraphe 6.4.4X et le réseau.

rlogin fonctionne de manière identique à telnet à la différence près qu'il considère que par défaut le login sur la machine distante est le même que celui de la machine locale. Il permet en outre d'utiliser un mécanisme de « confiance » permettant d'éviter de saisir le mot de passe. Ainsi, si le répertoire privé de l'utilisateur stundehr sur ayler.freejazz.org (la machine distante), contient un fichier .rhosts :

 
Sélectionnez
˜/.rhosts
# stundehr de mekanik.zeuhl.org est le bienvenu
mekanik.zeuhl.org stundehr

on pourra alors se connecter sur ayler depuis mekanik en tant qu'utilisateur stundehr sans avoir à saisir ni login name, ni mot de passe :

 
Sélectionnez
stundehr@mekanik:~> rlogin ayler.freejazz.org
stundehr@ayler:~>

Notez que l'on peut préciser un utilisateur différent pour rlogin avec l'option -l.

Ainsi en étant albert sur ayler.freejazz.org, on peut exécuter :

 
Sélectionnez
$ rlogin -l stundehr mekanik.zeuhl.org

pour préciser qu'on tente de se connecter en tant qu'utilisateur stundehr. 

4-2-3. Secure shell (ssh)

Les deux commandes précédentes présentent un inconvénient majeur : les transactions entre le serveur et le client ne sont pas chiffrées ; il est ainsi possible à l'aide d'outils spécialisés de voir passer en clair sur le réseau les commandes tapées par l'utilisateur, et, nettement plus inquiétant, le mot de passe saisi lors de l'initialisation de la connexion. C'est pourquoi on utilise aujourd'hui la commande ssh permettant de mettre en œuvre des transactions cryptées. La syntaxe est identique à celle de rlogin. La commande suivante, par exemple, permet de se connecter en tant qu'utilisateur stundehr.

 
Sélectionnez
$ ssh -l stundehr mekanik.zeuhl.org
Password:

L'autre forme est :

 
Sélectionnez
$ ssh stundehr@mekanik.zeuhl.org
Password:

Si, pour différentes raisons, vous acceptez le fait de saisir un mot de passe pour vous connecter sur une machine distante, vous pouvez passer directement à la section suivante (4.3Outils de communication d'Unix). Si vous souhaitez utiliser un mécanisme de confiance avec ssh et ainsi éviter d'avoir à saisir systématiquement un mot de passe, on aura recours au principe de chiffrement(63) par clé publique.

Dans cette technique de cryptographie, on génère deux clés : une publique accessible par tous et une privée qui doit être gardée secrète. On peut alors procéder à deux opérations génériques :

  • Le chiffrement d'un message : pour envoyer un message à un destinataire D on le chiffre avec la clé publique de D. Ce dernier et lui seul pourra déchiffrer le message avec sa clé privée.
  • La signature électronique : l'expéditeur d'un message peut le signer avec sa clé privée. N'importe quel destinataire pourra s'assurer de l'origine de ce message grâce à la clé publique de celui qui prétend être l'expéditeur.

Pour mettre en application le chiffrement par clé publique dans le cadre de ssh, on procède comme suit :

  1. création du couple de clés privée et publique ;
  2. diffusion de la clé publique vers les machines sur lesquelles on veut se connecter.

Par la suite, une connexion sur une machine distante sera établie après les étapes suivantes :

  1. le client contacte le serveur en envoyant la clé ; publique(64) ;
  2. le serveur examine si cette clé fait partie des clés autorisées. Dans l'affirmative il génère un nombre aléatoire A qu'il chiffre avec la clé publique et qu'il envoie au client ;
  3. étant donné que ce dernier est en possession de la clé privée il est le seul à pouvoir déchiffrer le message contenant le nombre A. L'accès à la clé privée est généralement verrouillée par une phrase secrète (cf. plus bas) connue par son propriétaire. Elle pourra lui être demandée lors de cette étape. Finalement le client renvoie ce qu'il a déchiffré (qui doit correspondre au nombre A) au serveur ;
  4. le serveur compare la réponse du client(65) au nombre qu'il a lui-même généré. Si et seulement si les deux informations sont identiques l'accès est autorisé.
4-2-3-a. Création du couple de clés

On crée la clé privée et la clé publique grâce à la commande suivante :

 
Sélectionnez
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lozano/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/lozano/.ssh/id_rsa.
Your public key has been saved in /home/lozano/.ssh/id_rsa.pub.
The key fingerprint is:
e2:bb:3b:82:56:da:34:02:d4:85:f3:b3:4b:b9:7b:1e stundehr@mekanik
[...]
$

Dans la séquence ci-dessus, on doit saisir une « pass phrase » qui vous sera demandée à l'étape 3 pour que le client accède à la clé privée. Il est possible ici de laisser cette phrase vide ; le client ssh aura alors accès à votre clé privée sans qu'on vous demande de mot de passe. Si une phrase secrète est saisie, il sera nécessaire de passer par un « agent ssh » (cf. 4.2.3Secure shell (ssh)) qui vous évitera de saisir cette phrase à chaque connexion.

Votre répertoire contient désormais deux fichiers (la clé privée ne doit bien évidemment être lisible que par vous) :

 
Sélectionnez
$ ls -1 ~/.ssh/id*
/home/stundehr/.ssh/id_rsa  <---------------------- la clé privée
/home/stundehr/.ssh/id_rsa.pub  <-------------------- la clé publique
$

On peut bien sûr créer plusieurs couples de clés en précisant le nom du fichier au moment de l'exécution de la commande ssh-keygen.

4-2-3-b. Diffusion de la clé publique

La diffusion de la clé publique consiste à déposer le contenu du fichier correspondant dans le fichier ~/.ssh/authorized_keys du serveur sur lequel on veut se connecter. Il existe plusieurs méthodes pour faire cette opération. En supposant la configuration suivante :

machine locale free.jazz.org   machine locale cool.jazz.org
utilisateur ayler   utilisateur miles

voici une méthode(66) qui fonctionne si le fichier n'existe pas encore sur la machine cool.jazz.org :

 
Sélectionnez
$ scp ~/.ssh/id_rsa.pub miles@cool.jazz.org:~/clef.pub
miles@cool.jazz.org's password :
id_rsa.pub 100% 396 1KB/s 00:00
$

Puis après s'être connecté sur le serveur cool.jazz.org, il faut créer le répertoire ~/.ssh et un fichier authorized_keys(67) :

 
Sélectionnez
$ mkdir .ssh
$ chmod go-rwx .ssh
$ mv clef.pub .ssh/authorized_keys
$

Si le fichier existe déjà, on remplacera la dernière commande par :

 
Sélectionnez
$ cat clef.pub >> .ssh/authorized_keys
$ rm clef.pub
$

qui ajoute au fichier authorized_keys le contenu de la clé publique copiée sur le serveur. Pour les « r3b3lz », on peut aussi exécuter la commande depuis le client :

 
Sélectionnez
$ ssh miles@... < ~/.ssh/id_rsa.pub "cat - >> ~/.ssh/autorized_keys"
$

Cette commande (dans laquelle j'ai remplacé le nom de la machine distante par « […] ») exécute sur le serveur distant la commande :

 
Sélectionnez
cat - >> ~/.ssh/authorized_keys

qui elle, attend sur son entrée des données qui seront ajoutées au fichier situé à droite de l'opérateur « append » >>. Ces données attendues sont envoyées sur l'entrée de la commande ssh qui les transmet au serveur.

Au moins sur la distribution Ubuntu, toutes ces solutions peuvent être automatisées grâce à un script shell connu sous le nom ssh-copy-id qui prend en argument le login et la machine distante sur laquelle on veut copier la clé publique.

4-2-3-c. Déverrouillage de la phrase secrète

Si vous avez suivi jusqu'ici, que vous avez saisi une « pass phrase » non vide au moment de la création des clés, alors lors d'une connexion ssh sur la machine distante vous avez dû obtenir :

 
Sélectionnez
$ ssh miles@cool.jazz.org
Enter passphrase for key '/home/ayler/.ssh/id_rsa':
$

Ce qui, je vous entends le dire in petto, ne nous avance guère… C'est vrai : nous étions censés simplifier la connexion ssh et « voilatipa » qu'on nous demande un mot de passe ! C'est ici qu'intervient la notion d'« agent ssh » un logiciel qui garde trace des clés utilisées pendant une session.

Je ne rentrerai pas ici dans les détails de l'installation ou du lancement d'un agent ssh. La plupart des distributions en lancent un (sous le nom ssh-agent) au moment du lancement de la session X. L'environnement Gnome pour ne pas le citer, lance même son propre gestionnaire de clés (gnome-keyring-daemon).

Lorsque l'agent ssh est actif, on peut lui demander gentiment d'ajouter dans son « trousseau » notre clé privée :

 
Sélectionnez
$ ssh-add
Enter passphrase for /home/ayler/.ssh/id_rsa:
Identity added: /home/ayler/.ssh/id_rsa (/home/ayler/.ssh/id_rsa)
$

Sans argument cette commande demande le déverrouillage de la clé correspondant au fichier ~/.ssh/id_rsa.

À partir de maintenant et jusqu'à la fin de la session,
vous devriez pouvoir vous connecter sur votre serveur
sans saisir de mot de passe (ouf…)

Quelques petites choses que vous aimeriez faire :

  • lister les clés gérées par l'agent : ssh-add -l ;
  • effacer toutes les clés mémorisées par l'agent : ssh-add -D ;
  • changer la phrase secrète associée à une clé :

     
    Sélectionnez
    ssh-keygen -p -P<ancienne> -N<nouvelle> -f <fichier>
  • remplace l'<ancienne> phrase par une <nouvelle> pour la clé privée stockée dans le <fichier>.

Pour avoir accès à vos serveurs préférés par ssh sans avoir à saisir de mot de passe, il vous faudra :

  1. distribuer votre clé publique sur chacun des serveurs ;
  2. déverrouiller votre clé secrète en début de chaque session.

Certains agents vous permettent de ne faire qu'une fois pour toutes la deuxième opération, d'autres vous obligent à modifier le démarrage de votre session pour automatiser ce déverrouillage.

4-3. Outils de communication d'Unix

Voici quelques outils qu'on retrouve sur un système unix. Dans la mesure où ces outils autorisent les utilisateurs à agir sur des machines distantes, il est possible que certains de ces services ne soient pas disponibles, pour des raisons de sécurité, sur les systèmes où le lecteur les testera. 

4-3-1. who

who permet d'obtenir la liste des utilisateurs connectés sur le système. Il s'agit des utilisateurs connectés sur la console (l'écran situé physiquement à côté de la machine), ou par telnet, ou par rlogin, etc.

 
Sélectionnez
$ who
albert console Mar 20 17:04
albert pts/0 Mar 20 17:04
stundehr ttyp1 Mar 20 17:28
$

La deuxième colonne indique les terminaux où sont connectés les utilisateurs albert et stundehr. Cette commande peut aussi indiquer si l'utilisateur est connecté à distance sur le système et le cas échéant la machine depuis laquelle il est connecté.

On trouve parfois la commande rwho qui indique quels utilisateurs sont connectés sur les machines unix du réseau local. L'avantage de cette commande réside dans le fait qu'il n'est pas nécessaire de se connecter sur une machine pour savoir quels autres utilisateurs l'utilisent. 

4-3-2. Changer d'identité

La commande su permet de devenir un autre utilisateur. Il faut bien sûr connaître son mot de passe :

  • su user

Par exemple en étant connecté en tant qu'utilisateur albert, on peut faire :

 
Sélectionnez
$ su stundehr
Password:  <------------------------- saisie du mot de passe de stundehr
$

on « devient » alors l'utilisateur stundehr. C'est-à-dire qu'on lance un shell en tant que stundehr. Notez qu'en faisant :

 
Sélectionnez
$ su - stundehr
Password:
$

le shell lancé est alors un shell de connexionSauvegarder ses configurations grâce aux fichiers de démarrage (login shell). 

4-3-3. write

write envoie un message particulier sur le terminal d'un utilisateur :

 
Sélectionnez
$ write stundehr
bonjour mon gars
 <---------------------------------------- Ctrl-d pour finir le message
$

Un utilisateur peut être spécifié sous la forme user@machine, s'il est connecté sur une machine distante. En outre tout utilisateur peut désactiver la réception de message avec la commande :

 
Sélectionnez
$ mesg n
$

et :

 
Sélectionnez
$ mesg y
$

pour la réactiver. 

4-3-4. finger

finger renvoie les informations de connexion d'un utilisateur donné sur une machine donnée. Ces informations concernent l'utilisateur lui-même (nom d'état civil, répertoire de travail, shell de connexion), ses dernières connexions, s'il a lu son mail, et plein d'autres choses. La syntaxe est :

  • finger utilisateur@machine

Si utilisateur dispose dans son répertoire racine sur machine, des fichiers .plan ou .project, leur contenu est alors affiché par la commande finger. On peut donc mettre dans ces fichiers des informations qu'on désire diffuser (comme ses coordonnées par exemple). Si l'utilisateur utilise un fichier .forwardFaire suivre son courrier, son contenu est également affiché par finger. Voici un exemple :

 
Sélectionnez
$ finger bidule@machine.distante.fr
Login: bidule Name: Machin Bidule
Directory: /home/bidule Shell: /bin/bash
On since Mon Apr 30 10:32 (CEST) on pts/1 from :0.0
22 minutes 10 seconds idle
On since Mon Apr 30 09:23 (CEST) on pts/2 from :0.0
On since Mon Apr 30 10:55 (CEST) on pts/3 from :0.0
2 minutes 50 seconds idle
No mail.
No Plan.
$

Étant notoirement faible sur le plan de la sécurité, le serveur finger est souvent désactivé sur les machines. 

4-3-5. talk

talk - comme son nom l'indique - permet de « parler » avec un autre utilisateur sur la même machine ou sur une machine distante. Une fois la commande lancée, la fenêtre du terminal est divisée en deux parties, et chaque utilisateur voit ce que tape l'autre en temps réel(68). Pour initier une discussion, il est nécessaire que les deux protagonistes lancent la commande talk, dont la syntaxe est :

  • talk utilisateur@machine

Ainsi :

  • l'un (stundehr) lance : talk albert@ayler.freejazz.org
  • l'autre (albert) : talk stundehr@mekanik.zeuhl.org

Après quelques secondes, une fois la connexion établie, chacun des utilisateurs a devant les yeux un écran où chacun voit le texte de l'autre dans la partie inférieure :

Image non disponible

stundehr peut alors répondre à son tour :

Image non disponible

Le caractère EOF (généralement Ctrl-d) met fin à la session, et la combinaison Ctrl-l rafraîchit l'écran, ce qui est parfois utile.

4-3-6. « remote » commandes

Nous avons déjà vu une commande de la famille « r » (r pour remote c'est-à-dire « à distance ») : rlogin. Il existe deux autres commandes de ce type : rcp permettant de copier un fichier sur (ou depuis) une machine et rsh pour lancer un shell distant.

Aujourd'hui il est vivement déconseillé d'utiliser ces commandes pour des raisons de sécurité, car toutes les informations transitent en clair sur le réseau. Nous présenterons donc leurs équivalents sécurisés à savoir scp et ssh.

  • scp permet de copier un fichier d'une machine à une autre :

    • scp utilisateur@machine:fichier fichier_dest

Par exemple :

 
Sélectionnez
$ rcp ayler@mekanik.zeuhl.org:/home/ayler/ghost.mp3 .
$
  • ssh permet - en plus de la connexion présentée au § 4.2.3Secure shell (ssh) - de lancer une commande sur une machine distante. La syntaxe est :

    • ssh machine commande

Par exemple :

 
Sélectionnez
$ ssh mekanik.zeuhl.org ls -l
-rw-r----- 1 albert sax 199 Sep 1 2000 ghost.mp3
-rwxr----- 1 albert sax 61 May 4 2000
-rwxr----- 1 albert sax 77 May 4 2000
$

On peut noter qu'à l'instar de la commande rlogin, les commandes ssh et scp acceptent l'option -l permettant de spécifier un autre utilisateur pour la connexion. 

4-4. Le courrier électronique

(69)Bien qu'il existe de nombreux logiciels de lecture de mail sous unix(70), il est bon de connaître les outils de base que propose unix pour pouvoir lire son courrier simplement en lançant une session ssh sur la machine sur laquelle vous recevez votre courrier. 

4-4-1. Format des adresses

Une boîte aux lettres électronique est identifiée par une adresse de la forme :

  • nom@domaine

La partie domaine peut désigner une machine existante, mais la plupart du temps désigne un domaine générique, par exemple dans :

  • bart@uchicago.edu

uchicago est un nom de domaine et non de machine. De manière analogue, la partie nom de l'adresse électronique ne correspond pas nécessairement à un utilisateur du système distant, ainsi l'utilisateur zappa qui a un compte unix sur une machine du domaine uncleme.at peut avoir l'adresse suivante :

  • frank@uncleme.at

On peut trouver également la forme :

  • Frank Zappa <franck@uncleme.at>

forme permettant de rajouter des fantaisies autour d'une adresse existante, tant que les fantaisies en question se limitent à l'extérieur des < et >. 

4-4-2. Mail user agents

Parmi l'ensemble des logiciels utilisés sous unix pour acheminer le courrier existent deux familles :

  • les mail transport agents (MTA) : les logiciels chargés d'acheminer le courrier d'une machine à une autre ; on peut faire l'analogie avec le facteur ou la poste qui délivre les courriers dans les boîtes ;
  • les mail user agents (MUA) : logiciels destinés à l'utilisateur permettant à la fois de consulter sa boîte aux lettres, et d'envoyer des courriers (au mail transport agent qui fait suivre).

En tant qu'utilisateur unix, on est confronté à la deuxième catégorie, la première étant réservée aux tâches d'administration système. Il existe sous unix une multitude de logiciels de messagerie utilisateur, le plus commun est mail. Ce mail existe également sous d'autres variantes Mail et mailx. Tous ces utilitaires ont des syntaxes généralement légèrement différentes selon les systèmes(71). Toujours est-il que le principe est souvent le suivant, pour envoyer un mail à franck@uncleme.at :

 
Sélectionnez
$ mail franck@uncleme.at
Subject: Dental floss
Hi.
.  <------------------- Un point seul sur une ligne pour envoyer le message
$

En ayant déjà rédigé le message dans un éditeur de texte (Emacs pour ne pas le nommer), on peut directement utiliser les redirectionsRedirections et tubes(72) :

 
Sélectionnez
$ cat tofranck
Hi.
Jazz is not dead,
It just smells funny.
$ mail -s "Dental floss" franck@uncleme.at < tofranck
$

Certains logiciels proposent l'option -c pour positionner le champ CC: (copie carbone), et bien d'autres encore. Par exemple mutt (http://www.mutt.org) utilise l'option -a pour attacher un fichier. Et :

 
Sélectionnez
$ mutt -a arf.jpg -s "Blow j." franck@uncleme.at < tofranck
$

arf.jpg est une image au format Jpeg qui sera envoyée sous forme d'attachement. 

4-4-3. Faire suivre son courrier

Il arrive souvent d'avoir des comptes sur plusieurs machines unix. Dans ce cas on peut vouloir ne relever qu'une boîte aux lettres. Pour ce faire il est nécessaire de faire suivre le courrier destiné aux autres boîtes sur la seule boîte que l'on veut consulter. On utilise alors un fichier nommé .forward qui doit se situer dans le répertoire privé.

Par exemple :

˜/.forward
Sélectionnez
albert@ayler.freejazz.fr

permet de faire suivre tout courrier arrivant sur la machine concernée à l'adresse albert@ayler.freejazz.fr. Si l'utilisateur (stundher) utilisant ce .forward souhaite également conserver une copie sur la machine, il peut ajouter une ligne à son fichier :

˜/.forward
Sélectionnez
\stundehr
albert@ayler.freejazz.fr

Notez l'utilisation du \ pour éviter une récursion sans fin.

Tout ce qui est raconté ici au sujet de l'acheminement du courrier à l'aide du fichier .forward ne sera effectif que si la machine unix du réseau local sur laquelle on crée le .forward est effectivement la machine qui reçoit le courrier et que le MTA de cette machine utilise le mécanisme du .forward.

4-5. Le ouèbe

De manière analogue à ce qu'il a été dit précédemment sur le courrier électronique, il existe de nombreux navigateurs web très intuitifs comme Netscape, Mozilla, Opera, pour ne citer que les plus connus. Le but de ce paragraphe est la présentation d'outils particuliers ne présentant pas d'interface graphique, mais ayant un intérêt évident. 

4-5-1. Format des adresses

Le standard pour localiser une ressource sur le réseau est l'uniform resource locator ou URL, ou encore « localiseur uniforme de ressources », sa forme la plus simple est toujours :

  • protocole://machine/fichier

Par exemple dans l'url :

  • http://www.freejazz.fr/dolphy/horns/bassclarinet.jpg

le protocole est http (hypertext transfert protocol, le protocole de transfert hypertexte utilisé sur le Web), la machine est www.freejazz.fr, et le fichier désigne une image nommée bassclarinet.jpg dans le répertoire dolpy/horns. De même :

  • ftp://ftp.lip6.fr/pub/Linux/Readme

désigne le fichier Readme stocké dans le répertoire pub/Linux de la machine dont le nom est ftp.lip6.fr et accessible via ftp. 

4-5-2. wget l'aspirateur

wget est un utilitaire du projet gnu permettant le téléchargement de fichiers en utilisant le protocole ftp ou http. wget effectue ces téléchargements sans intervention de l'utilisateur et en suivant éventuellement des liens ou les sous-répertoires d'un serveur web ou ftp :

 
Sélectionnez
$ wget http://www.freejazz.fr/dolphy/bassclarinet.jpg

téléchargera le fichier bassclarinet.jpg. Mais cet utilitaire est particulièrement utile pour télécharger plusieurs fichiers. Par exemple pour aspirer tout ou partie d'un site ouèbe, on pourra écrire :

 
Sélectionnez
$ wget -r -l1 http://www.bidule.fr/machin/chose

qui sauvera :

  1. le fichier index.html du répertoire machin/chose ;
  2. tous les liens apparaissant dans ce fichier index.html ; c'est la signification des options -r (récursif) et -l1 lien de « niveau 1 ».

En lançant :

 
Sélectionnez
$ wget -r -l2 http://www.bidule.fr/machin/chose

on télécharge également les liens apparaissant dans les pages mentionnées dans le fichier index.html (liens de « niveau 2 »).

Lors de l'utilisation de l'option -r pour suivre récursivement les liens jusqu'à un niveau donné, il est souvent utile de demander à wget de ne pas remonter au répertoire parent. Dans l'exemple précédent, ceci permet de se cantonner au répertoire machin/chose et ses descendants. On formule ce souhait à l'aide de l'option -np ou --no-parent.

Pour finir avec cette courte introduction à wget, il n'est pas inutile de noter l'usage qui suit. Supposons que la page désignée par :

  • http://www.truc.fr/machin/chose.html

contient des liens sur des images au format Jpeg portant l'extension jpg, alors la commande :

 
Sélectionnez
$ wget -r -l1 -Ajpg http://www.truc.fr/machin/chose.html
$

récupérera uniquement ces fichiers à l'exception de tous les autres liens de la page nommée chose.html.

Notons que pour les commandes transférant plusieurs fichiers, wget créera de lui-même sur la machine locale, un répertoire pour la machine hôte contenant le cas échéant, d'autres répertoires apparaissant dans l'URL. Pour éviter cela, on pourra faire appel aux options :

  • -nH ou --no-host pour ne pas créer de répertoire correspondant à la machine hôte ;
  • -nd ou --no-directories pour ne pas créer de répertoire du tout ;
  • --cut-dirs=nombre pour éviter de créer nombre niveaux dans l'arborescence de répertoires.

Par exemple :

 
Sélectionnez
$ wget -nH --cut-dirs=1 -r -l1
  http://www.freejazz.fr/dolphy/horns/

créera le répertoire horns dans le répertoire courant pour y sauver les fichiers aspirés.

Comme la plupart de ces utilitaires « ne faisant qu'une chose mais le faisant bien », on trouvera une foultitude d'options diverses et variées permettant d'arriver à ses fins quelle que soit l'exigence de la requête.

D'autres utilitaires effectuant le même type de tâche existent. Parmi eux les logiciels curl et lftp disponibles chez votre crémier le plus proche.

 

4-5-3. Lynx l'extraterrestre

lynx (jeu de mots d'informaticiens anglophones sur links, les liens) est un butineur de la toile (web browser) en mode texte. Le propos de lynx est de compulser des pages au format html. Ce browser peut être utile dans les situations où l'utilisateur veut éviter de lancer les logiciels habituels gourmands en ressources, ou simplement lorsque l'environnement courant ne permet pas d'utiliser le mode graphique. L'utilisation de lynx est simple :

  • « flèche bas » : lien suivant dans la page ;
  • « flèche haut » : lien précédent ;
  • « flèche droit » : suivi du lien ;
  • « flèche gauche » : dernier lien dans l'historique ;

En outre les touches :

  • d : permet de télécharger (download) un fichier désigné par le lien courant ;
  • z : permet d'interrompre le téléchargement ;
  • g : permet d'aller (go) vers une autre url ;
  • q : permet de quitter.

lynx possède une aide en ligne très complète qu'on peut consulter en pressant la touche ?, et un site web http://www.lynx.org/. Ainsi pour consulter le site http://opensource.org/, on tapera :

 
Sélectionnez
$ lynx www.opensource.org

On peut également se connecter par FTP sur une machine en utilisant le format particulier des URL :

 
Sélectionnez
$ lynx ftp://stundehr@mekanik.zeuhl.org

dans l'hypothèse où l'on dispose d'un compte dont le login est stundehr sur la machine mekanik.zeuhl.org.

Stéphane Chazelas me souffle que lynx est dépassé et lourd. D'autres programmes existent permettant de naviguer en mode texte sur le ouèbe, comme w3m et plus particulièrement elinks ou links2 

4-6. Conclusion

Ce (court) chapitre a eu pour but de présenter les utilitaires ayant trait à la communication sous unix. Il est intéressant de noter que tous les outils autour du transfert de données, de messagerie instantanée ou différée, d'accès aux systèmes à distance, etc. existent depuis longtemps et sont utilisables en mode texte. Ce deuxième aspect qui pourrait paraître curieux à l'heure d'aujourd'hui, assure à l'utilisateur la possibilité de manipuler des outils réseaux légers s'il le souhaite, et surtout lui permet d'automatiser ses requêtes ce qui est l'objet du chapitre suivant.


précédentsommairesuivant
En réalité une partie des ces adresses sont dites « privées » c'est-à-dire qu'elles sont réservées à un usage interne et ne sont donc pas visibles de l'extérieur.
Que penser alors d'un slogan d'une célèbre compagnie de téléphone française qui disait il y a quelques années : « bienvenue dans un monde .com » ?
Ou plus rigoureusement l'interface d'une machine.
Le protocole ICMP pour Internet Control Message Protocol.
Faire help pour avoir la liste des commandes disponibles.
Certains serveurs peuvent d'ailleurs vous reprocher votre manque de politesse, si vous utilisez une autre commande…
Le chiffrement d'un message est une technique de cryptographie permettant de le « brouiller » pour le rendre illisible. La cryptographie, quant à elle, est la science de l'échange des messages protégés.
Rappelez-vous qu'on a déposé la clé publique sur ledit serveur…
En réalité ce sont les signatures MD5 qui sont comparées.
La commande scp est présentée plus loin à la section 4.3.6« remote » commandes.
On suppose ici, par souci de clarté, que ˜/ est le répertoire de travail.
Plus précisément, à la vitesse autorisée par le débit du réseau. Utilisateur : albert Machine : ayler.freejazz.fr
Le mél comme disent les académiciens, le courriel comme disent les Québécois, l'e-mail comme disent les anglophones, le mail comme disent les Français.
Pour s'en assurer, on peut faire une recherche sur le site http://sourceforge.net.
Nous vous invitons donc à compulser les pages de manuels traitant de ces utilitaires.
Comme indiqué précédemment la commande mail utilisée ici accepte l'option -s ce qui n'est pas toujours le cas sur un système autre que LINUX. On s'orientera dans ce cas vers la commande mailx.

Licence Art libre http://artlibre.org. Par contre, les logos Developpez.com, en-tête, pied de page, css, et look et feel de l'article sont Copyright © 2013 Developpez.com.