<!doctype article public "-//OASIS//DTD DocBook V4.1//EN">
<article id="lg64f-fr" lang="fr">
 <articleinfo>
  <title>SSH et compagnie&nbsp;: sftp, scp et ssh-agent</title>
<subtitle>Linux Gazette numéro 64</subtitle>
<copyright><year>2001</year><holder>Matteo Dell'Omodarme</holder></copyright>
<author>
  <firstname>Matteo</firstname><surname>Dell'Omodarme</surname>
  <affiliation>
    <address><email>matt@martine2.difi.unipi.it</email></address>
  </affiliation>
</author>
<othercredit>
  <firstname>Jérôme</firstname><surname>Fenal</surname>
  <affiliation>
    <address><email>jerome@fenal.org</email></address>
  </affiliation>
  <contrib>Traduction française</contrib>
</othercredit>
<othercredit>
  <firstname>Xxx</firstname>
  <surname>Yyyy</surname>
  <affiliation>
    <address><email>xx@yy.zzz</email></address>
  </affiliation>
  <contrib>Relecture de la traduction française</contrib>
</othercredit>
<abstract>
<para>
Le but de cet article est de faire une introduction à quelques
programmes utiles dans la suite <productname>SSH</productname>, à savoir
<command>sftp</command>, <command>scp</command>, <command>ssh-agent</command>,
et <command>ssh-add</command>. Nous supposerons dans ce qui va suivre que le
daemon <command>sshd2</command> est bien configuré et lancé.
</para>
</abstract>
</articleinfo>

<!-- ###################################################################### -->
<sect1 id="lg64f-fr-1"><title><command>sftp</command> et vue d'ensemble de
<command>scp</command></title>
<para>
Concentrons-nous sur <command>sftp</command> et <command>scp</command>.
</para>
<para>
Le premier (<command>sftp</command> - en anglais, protocole de transfert de
fichier sécurisé) est un client à la mode <command>ftp</command> utilisé pour
transférer des fichiers à travers le réseau.
Il n'utilise pas de daemon FTP (<command>ftpd</command> ou
<command>wu-ftpd</command>) pour les connexions, ce qui permet une amélioration significative de la sécurité du système.
En fait, en surveillant les fichiers journaux de nos systèmes, nous
avons noté que 80% des attaques du mois dernier étaient lancées
contre le daemon <command>ftpd</command>. L'utilisation de
<command>sftp</command> empêche tous ces essais puisqu'elle permet d'arrêter le
daemon <command>wu-ftpd</command> potentiellement dangereux.
</para>
<para>
La seconde (<command>scp</command> - en anglais, copie sécurisée) est employée
pour copier des fichiers à travers le réseau de façon sécurisée. C'est un
remplacement pour la peu sûre commande <command>rcp</command>.
</para>
<para>
<command>sftp</command> et <command>scp</command> n'exigent aucun
daemon dédié puisque les deux programmes sont liés au serveur
<command>sshd</command>. Afin d'utiliser <command>sftp</command> et
<command>scp</command> vous devez insérer la ligne suivante dans le
fichier de configuration <filename
class="directory">/etc/ssh2/sshd2_config</filename>&nbsp;:
<programlisting>
subsystem-sftp                  sftp-server
</programlisting>
Vous devez redémarrer sshd après cette modification.
Vous pourrez ainsi utiliser <command>sftp</command> et
<command>scp</command> sur les systèmes où <command>sshd</command> est en
fonction.
</para>

<!-- ====================================================================== -->
<sect2><title>sftp</title>
<para>
<command>sftp</command> utilise SSH2 pour ses connexions, le transport
du fichier bénéficiant ainsi de la meilleure sécurité possible. Il y a
deux avantages à utiliser <command>sftp</command> au lieu de
<command>ftp</command>&nbsp;:
<itemizedlist>
<listitem><para>Les mots de passe ne sont jamais transférés en
clair, empêchant n'importe quelle attaque de type écoute
passive.</para></listitem>
<listitem><para>Les données sont chiffrées pendant le transfert,
rendant difficile l'espionnage ou la modification de la
connexion.</para></listitem> 
</itemizedlist>
L'utilisation de <command>sftp2</command> est simple. Supposons que vous vous
connectiez à votre compte <systemitem class='username'>mon_nom</systemitem> sur
la machine <systemitem class='systemname'>serveur1</systemitem>. Pour ce faire,
utilisez la commande&nbsp;:
<programlisting>
sftp mom_nom@serveur1
</programlisting>
Quelques options peuvent être spécifiées sur la ligne de commande
(voir la page de manuel afférante à <command>sftp</command> pour les
détails complets).
</para>
<para>
Quand <command>sftp2</command> est prêt à accepter des commandes
utilisateur, il envoie une invite <emphasis>sftp></emphasis>. Vous
trouverez dans la page de manuel de <command>sftp</command> une liste
complète des commandes que l'utilisateur peut utiliser, avec parmi
elles&nbsp;:
<informaltable frame="all">
<tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0">
<colspec colname="col1">
<tbody>
<row>
<entry><cmdsynopsis><command>quit</command></cmdsynopsis></entry>
<entry>Quitte l'application</entry>
</row>
<row>
<entry><cmdsynopsis><command>cd</command> <arg
choice='req'><replaceable>répertoire</replaceable></arg></cmdsynopsis></entry>
<entry>Change le répertoire de travail courant distant</entry>
</row>
<row>
<entry><cmdsynopsis><command>lcd</command> <arg
choice='req'><replaceable>répertoire</replaceable></arg></cmdsynopsis></entry>
<entry>Change le répertoire de travail courant local</entry>
</row>
<row>
<entry><cmdsynopsis><command>ls</command> <arg>-R</arg> <arg>-l</arg><arg rep='repeat' choice='plain'><replaceable>fichier</replaceable></arg></cmdsynopsis></entry>
<entry>Renvoie la liste des fichiers disponibles sur le serveur. Si
l'argument est un répertoire, son contenu est renvoyé. Quand l'option
<option>-R</option> est spécifiée, l'arborescence est renvoyée
récursivement (par défaut, les sous-répertoires des répertoires en
argument ne sont pas visités.) Quand l'option <option>-l</option> est
indiquée, les permissions, propriétaires, tailles et heures de
modifications de fichier sont aussi montrées. Quand aucun argument
n'est spécifié, le contenu du répertoire courant est renvoyé. Les
options <option>-R</option> et <option>-l</option> sont mutuellement
incompatibles.</entry>
</row>
<row>
<entry><cmdsynopsis><command>lls</command> <arg>-R</arg> <arg>-l</arg><arg rep='repeat' choice='plain'><replaceable>fichier</replaceable></arg></cmdsynopsis></entry>
<entry>idem ls, mais sur les fichiers et répertoires locaux. </entry>
</row>
<row>
<entry><cmdsynopsis><command>get</command> <arg rep='repeat' choice='plain'><replaceable>fichier</replaceable></arg></cmdsynopsis></entry>
<entry>Transfère les fichiers indiqués spécifiés du serveur vers le client. Les
répertoires sont récursivement copiés avec leur contenu. </entry>
</row>
<row>
<entry><cmdsynopsis><command>put</command> <arg rep='repeat' choice='plain'><replaceable>fichier</replaceable></arg></cmdsynopsis></entry>
<entry>Transfère les fichiers indiqués spécifiés du client vers le serveur. Les
répertoires sont récursivement copiés avec leur contenu.</entry>
</row>
<row>
<entry><cmdsynopsis><command>mkdir</command> <arg rep='repeat' choice='plain'><replaceable>répertoire</replaceable></arg></cmdsynopsis></entry>
<entry>Essaye de créer le répertoire dont le nom est indiqué en argument</entry>
</row>
<row>
<entry><cmdsynopsis><command>rmdir</command> <arg rep='repeat' choice='plain'><replaceable>répertoire</replaceable></arg></cmdsynopsis></entry>
<entry>Essaye de détruire le répertoire dont le nom est indiqué en argument</entry>
</row>
</tbody>
</tgroup>
</informaltable>

<command>sftp2</command> supporte l'utilisation de caractères jokers
en paramètre des commandes <command>ls</command>, <command>lls</command>,
 <command>get</command> et <command>put</command>. Le format en est
 défini dans la page de manuel sshregex.
</para>
<para>
Puisque <command>sftp</command> utilise des techniques de chiffrement,
il existe un inconvénent&nbsp;: la connexion est plus lente (d'un
facteur de 2 ou 3 au vu de mon expérience), mais ce point est
d'un intérêt marginal considérant les grands avantages de sécurité
apportés.
</para>
<para>
Dans un essai conduit sur notre réseau local, un renifleur de réseau
pouvait récupérer une moyenne de 4 mots de passe à l'heure sur les
connexions FTP. La mise en oeuvre de <command>sftp</command> en tant que
protocole standard pour le transfert de fichier à travers le réseau a pu
éliminer ce problème de sécurité.
</para>
</sect2>

<!-- ====================================================================== -->
<sect2><title>scp</title>
<para>
<command>scp2</command> (copie sécurisée) est utilisé pour copier des
fichiers à travers le réseau de manière sécurisée. Il utilise SSH2
pour le transfert des données&nbsp;: il utilise la même
authentification et fournit la même sécurité que SSH2. 
</para>
<para>
C'est probablement la manière la plus simple de copier un fichier sur
une machine à distance. Supposons que vous voulez copier le fichier
<filename>nom_fichier</filename> contenu dans le répertoire <filename class="directory">rep_local</filename> au répertoire <filename class="directory">rep_distant</filename> de votre compte <systemitem
class="username">mon_nom</systemitem> du serveur <systemitem
class="systemname">serveur1</systemitem>. En utilisant
<command>scp</command>, vous pouvez taper la ligne de commande&nbsp;:
<programlisting>
scp rep_local/nom_fichier mon_nom@serveur1:rep_distant
</programlisting>
Le fichier est ainsi copié en gardant son nom. Des caractères jokers
peuvent être utilisés (à ce sujet, consulter la page de manuel de
sshregex).
</para>
<para>
La commande&nbsp;:
<programlisting>
scp rep_local/* mon_nom@serveur1:rep_distant
</programlisting>
copie tous les fichiers du répertoire <filename
class='directory'>rep_local</filename> dans le répertoire
<filename class='directory'>rep_distant</filename> de la machine <systemitem
class='systemname'>serveur1</systemitem>.
</para>
<para>
La commande: 
<programlisting>
scp mon_nom@serveur1:rep_distant/nom_fichier .
</programlisting>
copie le fichier <filename>nom_fichier</filename> du répertoire distant sur
<systemitem class='systemname'>serveur1</systemitem>
<filename class='directory'>rep_distant</filename> sur le répertoire local
courant.
</para>
<para>
<command>scp</command> supporte bon nombre d'options et permet des
copies entre deux systèmes distants comme dans l'exemple
suivant&nbsp;:
<programlisting>
scp mon_nom@serveur1:rep_distant/nom_fichier mon_nom@serveur2:autre_rep
</programlisting>
</para>
<para>
Voyez la page de manuel pour une présentation complète.
</para>
<para>
Évidemment, en utilisant <command>scp</command>, vous devez connaître
l'arborescence exacte des répertoires de la machine distante, si bien
que dans la pratique <command>sftp</command> est souvent
préféré<footnote><para>NdT&nbsp;: disons plutôt que <command>scp</command> sera
utilisé pour lancer des transferts programmés avec <command>cron</command>,
par exemple, et que <command>sftp</command> sera utilisé en mode
interactif.</para></footnote>.
</para>
</sect2>
</sect1>

<!-- ###################################################################### -->
<sect1 id="lg64f-fr-2"><title>Gestion des clés de SSH</title>
<para>
La suite SSH contient deux programmes permettant de gérer les clés
d'authentification, permettant à l'utilisateur de se connecter sans
saisir de mot de passe ou de phrase de passe. Ces programmes sont
<command>ssh-agent</command> et <command>ssh-add</command>.
</para>

<!-- ====================================================================== -->
<sect2><title>ssh-agent</title>
<para>
Dans la page de manuel de <command>ssh-agent</command>, nous pouvons
lire&nbsp;: &laquo;&nbsp;ssh-agent2 est un programme pour conserver des
clés privées d'authentification. L'idée est que ssh-agent2 est
démarré au début d'une session X-Window ou d'une session de connexion
terminal, et que tous les autres programmes ou fenêtres sont lancés en
tant que processus fils de ssh-agent2 (la commande lance X ou
l'interpréteur de commande interactif de l'utilisateur).
Les programmes lancés par l'agent héritent de la connexion à l'agent,
et l'agent est automatiquement utilisé pour l'authentification à clé
publique lors de connexions à d'autres machines utilisant
ssh.&nbsp;&raquo;
</para>
<para>
Il y a deux manières d'utiliser <command>ssh-agent</command> selon que
vous utilisiez <command>xdm</command> ou non. Dans le premier cas, il
vous faudra modifier votre fichier <emphasis>.xsession</emphasis> de votre
répertoire utilisateur (<filename class='directory'>$HOME</filename>).  Deux
procédures pour y arriver&nbsp;: copiez <filename>.xsession</filename> en
<filename>.xsession.toto</filename> et mettez uniquement la ligne qui suit dans
<filename>.xsession</filename>&nbsp;:
<programlisting>
exec ssh-agent ./.xsession-toto
</programlisting>
Vous pouvez aussi modifier <filename>.xsession</filename> et chercher
chaque ligne contenant l'expression &laquo;&nbsp;exec
programme&nbsp;&raquo;. Modifiez ces lignes pour qu'elles apparaissent
sous la forme &laquo;&nbsp;exec ssh-agent programme&nbsp;&raquo
</para>
<para>
Quittez votre session X et redémarrez-la. <command>ssh-agent</command>
démarrera la session X en tant que processus fils unique et attendra
les clés SSH à ajouter à sa base de données.
</para>
<para>
Si <command>xdm</command> ne tourne pas sur votre machine, la
procédure est plus simple car vous n'aurez qu'à lancer votre session X
en utilisant la commande&nbsp;:
<programlisting>
ssh-agent startx
</programlisting>
Ainsi, <command>ssh-agent</command> s'exécutera correctement.
</para>
</sect2>

<!-- ====================================================================== -->
<sect2><title>ssh-add</title>
<para>
Dès que <command>ssh-agent</command> est en place, vous pouvez ajouter
des identités à sa base de données en utilisant la commande
<command>ssh-add</command>. Vous ne pouvez ajouter ces identités que
depuis des processus fils d'un ancêtre <command>ssh-agent</command>,
sinon le message d'erreur suivant vous sera affiché&nbsp;:
<computeroutput>
Failed to connect to authentication agent - agent not running ?
</computeroutput>
L'utilisation de <command>ssh-add</command> est simple&nbsp;: lancez
la commande suivante&nbsp;:
<programlisting>
ssh-add
</programlisting>
<command>ssh-add</command> balaiera le fichier
<filename>$HOME/.ssh2/identification</filename> qui contient les noms
des clés privées utilisées pour l'authentification. Si ce fichier
n'existe pas, le nom standard de la clé privée est utilisé (à
savoir&nbsp;: <filename>$HOME/.ssh2/id_dsa_1024_a</filename>.)
Si une clé publique requiert une phrase de passe,
<command>ssh-add</command> la demande à l'utilisateur&nbsp;:
<computeroutput>
Adding identity: /home/matt/.ssh2/id_dsa_1024_a.pub
Need passphrase for /home/matt/.ssh2/id_dsa_1024_a (..)
Enter passphrase:
</computeroutput>
Vous pouvez obtenir la liste de toutes les identités endossées par
l'agent en utilisant la commande <command>ssh-add
<option>-l</option></command>&nbsp;:
<computeroutput>
Listing identities.
The authorization agent has one key:
id_dsa_1024_a: 1024-bit dsa, (...)
</computeroutput>
</para>
</sect2>
</sect1>

<!-- ###################################################################### -->
<sect1 id="lg64f-fr-3"><title>Conclusion, liens utiles</title>
<para>
Beaucoup d'utilisateurs de <command>telnet</command>, de
<command>rlogin</command>, de <command>ftp</command> ne se rendent pas
compte que leur mot de passe est transmis en clair à travers le
réseau, mais il l'est. L'utilisation de protocoles sécurisés a pû
permettre une transmission sécurisée à travers des réseaux non-sûrs.
</para>
<para>
SSH, en chiffrant le trafic, élimine pertinemment l'écoute
clandestine, le détournement de connexion, et d'autres attaques
réseau.
</para>
<para>
Ces articles sont seulement une introduction à SSH&nbsp;; vous
trouverez plus d'informations à ce sujet dans les pages de manuel de
<command>ssh</command>, de <command>sshd</command> et de
<command>sftp</command>.
</para>
<para>
Vous pouvez obtenir la suite SSH de <ulink
url="http://www.ssh.com/products/ssh">www.ssh.com/products/ssh/</ulink>,
site principal de SSH ou d'un site miroir. 
Vous y trouverez également quelques informations très intéressantes
sur la technologie de SSH et la cryptographie en général dans le <ulink
url="http://www.ssh.com/tech/">Tech corner</ulink>.
</para>
<para>
Vous pouvez aussi visiter <ulink
url="http://www.openssh.com/">www.openssh.com</ulink> où vous pouvez
télécharger <productname>OpenSSH</productname>, mise en oeuvre libre du
protocole SSH. La version portable est disponible à <ulink
url="http://www.openssh.com/portable.html">www.openssh.com/portable.html</ulink>.
Vous pouvez également lire la FAQ d'<productname>OpenSSH</productname>&nbsp;:
<ulink url="http://www.openssh.com/faq.html">www.openssh.com/faq.html</ulink>.
</para>

<!-- ###################################################################### -->
<para>Copyright &copy; 2001, Matteo Dell'Omodarme</para>
<para>Copying license <ulink url="http://www.linuxgazette.com/copying.html">http://www.linuxgazette.com/copying.html</ulink></para>
<para>Paru dans le numéro 64 de la Linux Gazette, mars 2001.</para>
<para>Traduction française par Jérôme Fenal <email>jerome@fenal.org</email>.</para>
</sect1>
</article>
