tuteurs.ens.fr/internet/loin/ssh.tml
2003-07-19 11:03:18 +00:00

439 lines
No EOL
14 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>ssh</title>
</head>
<body>
<h1>Connexion à distance sécurisée</h1>
<p>
Il existe plusieurs protocoles Internet permettant de se connecter à
un ordinateur distant&nbsp;: <code>telnet</code>, les r-commandes
(<code>rlogin</code>, <code>rsh</code> ou encore <code>rcp</code>),
<code>ssh</code> (<i lang="la">Secure Shell</i>). Alors que
<code>telnet</code> et les r-commandes font circuler les informations
en clair sur le réseau (voir notre documentation sur les <a
href="&url.tuteurs;internet/danger_telnet.html">dangers de
<code>telnet</code></a>), <code>ssh</code> est beaucoup plus
sûr&nbsp;:
</p>
<ul>
<li> le client (par exemple, vous) et le serveur (clipper)
s'authentifient mutuellement, ce qui évite que des pirates se fassent
passer pour l'un ou pour l'autre</li>
<li> les données échangées sur le réseau par le biais de
<code>ssh</code> sont chiffrées, ce qui garantit leur confidentialité</li>
</ul>
<p class="continue">
Pour ces deux raisons, nous vous conseillons vivement
d'<strong>abandonner <code>telnet</code> et
<code>rlogin</code></strong> pour adopter <code>ssh</code>. Le
piratage, ça n'existe pas que dans les films. Vous pensez peut-être
que rien sur votre compte n'intéresse un pirate, et que donc il n'est
pas utile de prendre vos précautions. Vous avez tort à deux
titres&nbsp;: le pirate peut se servir de votre compte pour attaquer
une autre machine... Bonne chance alors pour convaincre la DST que ce
n'était pas vous. Ensuite, en vous exposant au danger, vous mettez
ensuite en danger les autres utilisateurs de l'ENS. Alors soyez
responsables.
</p>
<p>
Par ailleurs, <code>ssh</code> n'est vraiment <em>pas</em> une
particularité UNIX. Vous pouvez vous connecter par <code>ssh</code>
également avec Windows ou MacOS. Reportez-vous à notre documentation
sur les <a href="&url.tuteurs;internet/danger_telnet.html">dangers de
telnet</a>, nous vous y indiquons quels programmes vous pouvez
utiliser pour faire du <code>ssh</code>. Vous pouvez également
consulter, sur le site des <a
href="http://www.eleves.ens.fr/wintuteurs/">WinTuteurs</a>, le <a
href="http://www.eleves.ens.fr/wintuteurs/tutorials/putty/">tutorial
sur PuTTY</a>.
</p>
<h2>Se connecter</h2>
<p>
L'utilisation de <code>ssh</code> pour se connecter à une machine est extrêmement
simple sous Unix et Linux.
</p>
<pre>
<span class="prompt">drakkar ~ $</span> <code>ssh</code> &lt;login&gt;@&lt;nom de la machine&gt;
</pre>
<p class="continue">
Ou bien&nbsp;:
</p>
<pre>
<span class="prompt">drakkar ~ $</span> ssh &lt;nom de la machine&gt; -l &lt;login&gt;
</pre>
<p class="continue">
Vous pouvez utiliser aussi bien le nom de la machine
(<code>clipper.ens.fr</code>, <code>horus.ens.fr</code>, etc.) que son
adresse IP (pour clipper, <code>129.199.121.1</code>).
</p>
<p>Si vous avez le même login sur les deux machines en question, ce
n'est pas la peine de le mentionner, tapez simplement&nbsp;:
</p>
<pre>
<span class="prompt">drakkar ~ $</span> ssh &lt;nom de la machine&gt;
</pre>
<p>
Si c'est la première fois que vous vous connectez par <code>ssh</code>
sur cette machine, vous verrez un message tel que celui-ci&nbsp;:
</p>
<pre>
<span class="prompt">drakkar ~ $</span> ssh toto@machine.monlabo.fr
The authenticity of host 'machine.monlabo.fr (111.222.333.4)' can't be established.
RSA1 key fingerprint is 1z:2y:3x:4w:56:78:98:78:ab:cd:ef:01:23:45:67:89.
Are you sure you want to continue connecting (yes/no)?
</pre>
<p class="continue">
Ne paniquez pas ! Tout est parfaitement normal, on vérifie qu'il
s'agit de la bonne machine. Il suffit de répondre 'yes' pour
continuer. <code>ssh</code> vous dira alors&nbsp;:
</p>
<pre>
Warning: Permanently added 'machine.monlabo.fr,111.222.333.4' (RSA1) to
the list of known hosts.
</pre>
<p class="continue">
Ce qui signifie que <code>ssh</code> ne vous embêtera plus à poser la
question.
</p>
<h3>Authentification par mot de passe</h3>
<p>
La façon la plus simple de s'identifier est le mot de passe. Par
défaut, <code>ssh</code> vous le réclamera.
</p>
<pre>
<span class="clipper">clipper ~ $</span> ssh machine.monlabo.fr
toto@machine's password:
</pre>
<p class="continue">
Il vous suffit de taper votre mot de passe. Attention, pour des
raisons de sécurité (un coup d'&oelig;il sur l'écran de son voisin est
un mode de piratage basique mais efficace) celui n'apparaître pas à
l'écran, vous devrez taper en aveugle. Si vous pensez avoir commis une
erreur dans votre mot de passe, faites <code>Ctrl+u</code> et retapez
le en entier. Si vous avez tapé correctement votre mot de passe, vous
aurez à votre disposition un shell sur la machine distante. Sinon,
vous lirez « <i lang="en">Permission denied.</i> » et il faudra
recommencer.
</p>
<h3>Authentification par clef publique</h3>
<p>
Une autre méthode utilise ce qu'on appelle une « clef publique »,
c'est-à-dire un code qui vous identifie. Si vous suivez la procédure
décrite ci-dessous, vous pourrez vous connecter par <code>ssh</code>
sur une machine distante sans avoir à taper de mot de passe.
</p>
<h4>Générer la clef</h4>
<p>
Pour ce faire, commencez par taper la commande <code>ssh-keygen</code>
(comme <i lang="en">key generator</i>) <strong>sur la machine
locale</strong> (et pas sur la machine à distance). Le générateur de
clefs va en générer deux, une clef publique et une clef privée. Il va
placer la clef privée (sous forme chiffrée) dans un endroit qui, par
défaut, est <code>$HOME/.ssh/identity</code>&nbsp;:
</p>
<pre>
<span class="prompt">drakkar ~ $</span> ssh-keygen
Initializing random number generator...
Generating p:
...........................................................................
..............................................++ (distance 2064)
Generating q: ...............++ (distance 324)
Computing the keys...
Testing the keys...
Key generation complete.
Enter file in which to save the key
(/users/00/litt/toto/.ssh/identity):
</pre>
<p class="continue">Appuyez sur <code>Enter</code> pour accepter la
localisation de la clef. <code>ssh-keygen</code> vous demande ensuite
une « <i lang="en">passphrase</i> » (équivalent d'un mot de passe,
mais sous forme de phrase). Cette phrase sert à fortifier la clef pour
la rendre plus difficilement cassable. À partir de là, deux
solutions&nbsp;:
</p>
<ul>
<li> si vous tapez une phrase, votre connection sera plus sûre, mais
vous devrez utiliser <code>ssh-agent</code> pour ne pas avoir à la
retaper à chaque fois (voir plus bas)</li>
<li> vous ne tapez pas de phrase (et appuyez seulement sur
<code>Enter</code>), votre connexion sera moins sûre</li>
</ul>
<p>Que vous tapiez une phrase ou pas, à la fin vous verrez&nbsp;</p>
<pre>
Your identification has been saved in
/users/00/litt/toto/.ssh/identity.
Your public key is:
1024 37
123123123123123123123123123123123123123123123123123123123123123123123123123123123123123
123123123123123123123123123123123123123123123123123123123123123123123123123123123123123
123123123123123123123123123123123123 toto@machine
Your public key has been saved in
/users/00/litt/toto/.ssh/identity.pub
</pre>
<h4>Que faire de la clef</h4>
<p class="continue">
Si l'on récapitule, <code>ssh-keygen</code> a généré deux
clefs&nbsp;:</p>
<ul>
<li> une clef privée (chiffrée si vous avez donné une phrase, non
chiffrée sinon) qui est <code>$HOME/.ssh/identity</code> et qui n'est
accessible qu'à vous</li>
<li> une publique (non chiffrée) qui est
<code>$HOME/.ssh/identity.pub</code> et qui peut être lue par tout le
monde</li>
</ul>
<p>
Maintenant, sur la machine <strong>distante</strong>, allez dans le
répertoire <code>.ssh</code> et éditez le fichier
<code>authorized_keys</code>&nbsp;: ajoutez à la fin, et <strong>sur
une seule ligne</strong> (attention aux éditeurs qui coupent les
lignes) la clef publique que vous venez de générer. Procédez ainsi
pour toutes les machines distantes auxquelles vous voulez vous
connecter sans avoir à taper votre mot de passe. Et voilà&nbsp;!
</p>
<h4>Utiliser <code>ssh-agent</code></h4>
<p>
Si vous avez opté pour la solution « phrase de passe », bravo, votre
connexion est plus sûre. Mais vous devez taper à chaque fois ladite
phrase... Solution, utiliser <code>ssh-agent</code>.
</p>
<p>D'abord, il faut lancer <code>ssh-agent</code>, qui gère les clefs
d'identification. Si vous êtes logué dans une salle informatique de
l'ENS avec la config conscrits, pas de problème,
<code>ssh-agent</code> est déjà lancé. Si ce n'est pas le cas, il faut
le lancer vous-même. Comme l'agent est disponible dans tous les
programmes qui découlent, on le lance au début d'une session. Par
exemple, quand vous êtes en mode texte et que vous lancez le serveur
X&nbsp;:
</p>
<pre>
<span class="prompt">machine ~ $</span> ssh-agent startx
</pre>
<p>
Quand vous vous loguez à distance, c'est plutôt&nbsp;:
</p>
<pre>
<span class="prompt">machine ~ $</span> exec ssh-agent $SHELL
</pre>
<p>
Une fois lancé, l'agent vous suit dans toutes vos connexions à
distance, et ainsi il est disponible partout. Il faut donner à l'agent
votre clef à gérer en tapant <code>ssh-add</code>. On vous demande
alors votre phrase de passe :
</p>
<pre>
<span class="prompt">machine ~ $</span> ssh-add
Need passphrase for /home/toto/.ssh/identity (toto@machine)
Enter passphrase:
Identity added: /home/toto/.ssh/identity (toto@machine)
</pre>
<p>C'est tout&nbsp;!</p>
<h3>Exécution d'une commande à distance</h3>
<p>
Vous pouvez également utiliser <code>ssh</code> pour exécuter une
commande à distance. Par exemple, vous voulez, de votre machine
personnelle, connaître l'heure sur clipper, pour savoir si votre
machine est en retard, en avance ou à l'heure.
</p>
<pre>
<span class="prompt">machine ~ $</span> ssh clipper.ens.fr date
Fri Jul 4 12:01:49 MET DST 2003
</pre>
<p class="continue">
N'oubliez pas de préciser <code>toto@machine</code> si vos logins sont
différents entre les deux machines.
</p>
<h3>Message d'erreur</h3>
<p>
Il est possible que vous voyiez un jour le message d'erreur suivant&nbsp;:
</p>
<pre>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle
attack)!
It is also possible that the host key has just been changed.
Please contact your system administrator.
</pre>
<p class="continue">
Ce message signifie que la clef ssh (l'identification) de la machine
distante a changé. En effet, à chaque fois que vous vous connectez à
une machine par <code>ssh</code>, celle-ci présente à votre machine
une sorte de carte d'identité, ainsi vous êtes sûr qu'il s'agit bien
de la bonne machine et pas d'un pirate. Ou bien la machine a
réellement changé de clef ssh (à l'ENS, cela arrive de temps à autres
quand le SPI upgrade une machine), ou bien c'est une attaque de
pirate. Il vaut mieux écrire au SPI pour savoir ce qu'il en est.
</p>
<h2>Transférer des fichiers</h2>
<p>Il y a d'autres commandes associées à <code>ssh</code> qui vous
permettent, de manière tout aussi sûre, de transférer des fichiers
d'une machine à une autre. En l'espèce, <code>scp</code> (<i
lang="en">Secure Copy</i>) a un fonctionnement aussi simple que celui
de <code>ssh</code>.</p>
<p>
Les explications qui suivent sous pour les sytèmes UNIX. Pour savoir
comment faire sous Windows, reportez-vous au tutorial des <a
href="http://www.eleves.ens.fr/wintuteurs/">WinTuteurs</a> sur <a
href="http://www.eleves.ens.fr/wintuteurs/tutorials/transfiles/">WinSCP</a>.
</p>
<h3>De la machine locale à la machine distante</h3>
<p>Pour envoyer des fichiers de votre machine locale à la machine
distante, faites&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp &lt;mon ou mes fichiers&gt; machine.monlabo.fr:
</pre>
<p class="continue">
Attention, <em>n'oubliez pas les deux points à la fin</em>. Vous
devrez taper votre mot de passe (sauf si vous utilisez
l'authentification par clef publique, voir ci-dessus), puis
<code>ssh</code> se lancera dans le transfert en vous indiquant sa
progression&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp tagada.txt machine.monlabo.fr:
toto@machine.monlabo.fr's password:
tagada.txt 100% |***************************************| 2263 00:00
</pre>
<p class="continue">
Pour énumérer les fichiers à copier, mettez-les simplement à la suite,
séparés par une espace, sans virgule.
</p>
<p>Pour transférer un <strong>répertoire</strong> entier, il faut
utiliser l'option <code>-r</code> (comme <i lang="en">recursive</i>),
sinon ssh vous dira « &lt;répertoire&gt;: <i lang="en">not a regular
file</i> ».
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp -r &lt;répertoire&gt; machine.monlabo.fr:
</pre>
<p class="continue">
Dans ces premiers examples, le(s) fichier(s) sera ou seront copié(s),
avec le <em>même nom</em> sur la machine distante, à la racine de
votre compte. Nous allons compliquer progressivement les
choses. Maintenant, vous voulez changer le nom du fichier en cours de
route, renommer <code>tagada.txt</code> en
<code>coincoin.txt</code>&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp tagada.txt machine.monlabo.fr:coincoin.txt
</pre>
<p class="continue">
Maintenant, nous allons envoyer notre fichier <code>tagada.txt</code>
à un endroit précis sur le compte distant, dans le répertoire
<code>$HOME/divers/blagues</code>&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp tagada.txt machine.monlabo.fr:divers/blagues
</pre>
<h3>De la machine distante à la machine locale</h3>
<p>Pour rapatrier des fichiers de la machine distante à votre machine
locale, la même syntaxe est utilisée, mais inversée&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp machine.monlabo.fr:tagada.txt .
</pre>
<p class="continue">
Le . (point) à la fin signifie que <code>scp</code> devra mettre le
fichier <em>ici</em>, dans le répertoire dans lequel vous vous trouvez
actuellement. Évidemment, vous pouvez lui indiquer un autre
répertoire&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp machine.monlabo.fr:tagada.txt divers
</pre>
<p class="continue">
Et ainsi de suite, vous pouvez appliquez les mêmes techniques que pour
le transfert machine locale -> machine distante, décrites ci-dessus.
</p>
<div class="metainformation">Auteur&nbsp;: Marie-Lan Nguyen. Dernière
modification&nbsp;: le <date value="$Date: 2003-07-19 11:03:18 $" />.</div>
</body>
</html>