tuteurs.ens.fr/internet/loin/ssh.tml

439 lines
14 KiB
Text
Raw Normal View History

<?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 <20> distance s<>curis<69>e</h1>
<p>
Il existe plusieurs protocoles Internet permettant de se connecter <20>
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<EFBFBD>r&nbsp;:
</p>
<ul>
<li> le client (par exemple, vous) et le serveur (clipper)
s'authentifient mutuellement, ce qui <20>vite que des pirates se fassent
passer pour l'un ou pour l'autre</li>
<li> les donn<6E>es <20>chang<6E>es sur le r<>seau par le biais de
<code>ssh</code> sont chiffr<66>es, ce qui garantit leur confidentialit<69></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, <20>a n'existe pas que dans les films. Vous pensez peut-<2D>tre
que rien sur votre compte n'int<6E>resse un pirate, et que donc il n'est
pas utile de prendre vos pr<70>cautions. Vous avez tort <20> 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'<27>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<EFBFBD> UNIX. Vous pouvez vous connecter par <code>ssh</code>
<EFBFBD>galement avec Windows ou MacOS. Reportez-vous <20> 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 <20>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 <20> une machine est extr<74>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<6D>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><3E>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<61>! 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<6D>tera plus <20> poser la
question.
</p>
<h3>Authentification par mot de passe</h3>
<p>
La fa<66>on la plus simple de s'identifier est le mot de passe. Par
d<EFBFBD>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<69> (un coup d'&oelig;il sur l'<27>cran de son voisin est
un mode de piratage basique mais efficace) celui n'appara<72>tre pas <20>
l'<27>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<61> correctement votre mot de passe, vous
aurez <20> votre disposition un shell sur la machine distante. Sinon,
vous lirez <20><><i lang="en">Permission denied.</i><3E><> et il faudra
recommencer.
</p>
<h3>Authentification par clef publique</h3>
<p>
Une autre m<>thode utilise ce qu'on appelle une <20><>clef publique<75><65>,
c'est-<2D>-dire un code qui vous identifie. Si vous suivez la proc<6F>dure
d<EFBFBD>crite ci-dessous, vous pourrez vous connecter par <code>ssh</code>
sur une machine distante sans avoir <20> taper de mot de passe.
</p>
<h4>G<>n<EFBFBD>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 <20> distance). Le g<>n<EFBFBD>rateur de
clefs va en g<>n<EFBFBD>rer deux, une clef publique et une clef priv<69>e. Il va
placer la clef priv<69>e (sous forme chiffr<66>e) dans un endroit qui, par
d<EFBFBD>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 <20><><i lang="en">passphrase</i><3E><> (<28>quivalent d'un mot de passe,
mais sous forme de phrase). Cette phrase sert <20> fortifier la clef pour
la rendre plus difficilement cassable. <20> 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 <20> la
retaper <20> 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, <20> 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<EFBFBD>r<EFBFBD> deux
clefs&nbsp;:</p>
<ul>
<li> une clef priv<69>e (chiffr<66>e si vous avez donn<6E> une phrase, non
chiffr<EFBFBD>e sinon) qui est <code>$HOME/.ssh/identity</code> et qui n'est
accessible qu'<27> vous</li>
<li> une publique (non chiffr<66>e) qui est
<code>$HOME/.ssh/identity.pub</code> et qui peut <20>tre lue par tout le
monde</li>
</ul>
<p>
Maintenant, sur la machine <strong>distante</strong>, allez dans le
r<EFBFBD>pertoire <code>.ssh</code> et <20>ditez le fichier
<code>authorized_keys</code>&nbsp;: ajoutez <20> la fin, et <strong>sur
une seule ligne</strong> (attention aux <20>diteurs qui coupent les
lignes) la clef publique que vous venez de g<>n<EFBFBD>rer. Proc<6F>dez ainsi
pour toutes les machines distantes auxquelles vous voulez vous
connecter sans avoir <20> taper votre mot de passe. Et voil<69>&nbsp;!
</p>
<h4>Utiliser <code>ssh-agent</code></h4>
<p>
Si vous avez opt<70> pour la solution <20><>phrase de passe<73><65>, bravo, votre
connexion est plus s<>re. Mais vous devez taper <20> 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 <20>tes logu<67> dans une salle informatique de
l'ENS avec la config conscrits, pas de probl<62>me,
<code>ssh-agent</code> est d<>j<EFBFBD> lanc<6E>. 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 <20>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 <20> distance, c'est plut<75>t&nbsp;:
</p>
<pre>
<span class="prompt">machine ~ $</span> exec ssh-agent $SHELL
</pre>
<p>
Une fois lanc<6E>, l'agent vous suit dans toutes vos connexions <20>
distance, et ainsi il est disponible partout. Il faut donner <20> l'agent
votre clef <20> g<>rer en tapant <code>ssh-add</code>. On vous demande
alors votre phrase de passe<73>:
</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<45>cution d'une commande <20> distance</h3>
<p>
Vous pouvez <20>galement utiliser <code>ssh</code> pour ex<65>cuter une
commande <20> distance. Par exemple, vous voulez, de votre machine
personnelle, conna<6E>tre l'heure sur clipper, pour savoir si votre
machine est en retard, en avance ou <20> 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<70>ciser <code>toto@machine</code> si vos logins sont
diff<EFBFBD>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<6E>. En effet, <20> chaque fois que vous vous connectez <20>
une machine par <code>ssh</code>, celle-ci pr<70>sente <20> votre machine
une sorte de carte d'identit<69>, ainsi vous <20>tes s<>r qu'il s'agit bien
de la bonne machine et pas d'un pirate. Ou bien la machine a
r<EFBFBD>ellement chang<6E> de clef ssh (<28> l'ENS, cela arrive de temps <20> autres
quand le SPI upgrade une machine), ou bien c'est une attaque de
pirate. Il vaut mieux <20>crire au SPI pour savoir ce qu'il en est.
</p>
<h2>Transf<73>rer des fichiers</h2>
<p>Il y a d'autres commandes associ<63>es <20> <code>ssh</code> qui vous
permettent, de mani<6E>re tout aussi s<>re, de transf<73>rer des fichiers
d'une machine <20> une autre. En l'esp<73>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<79>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 <20> la machine distante</h3>
<p>Pour envoyer des fichiers de votre machine locale <20> 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 <20> 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 <20>num<75>rer les fichiers <20> copier, mettez-les simplement <20> la suite,
s<EFBFBD>par<EFBFBD>s par une espace, sans virgule.
</p>
<p>Pour transf<73>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 <20><>&lt;r<>pertoire&gt;: <i lang="en">not a regular
file</i><3E><>.
</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<70>(s),
avec le <em>m<>me nom</em> sur la machine distante, <20> 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>
<EFBFBD> un endroit pr<70>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 <20> la machine locale</h3>
<p>Pour rapatrier des fichiers de la machine distante <20> votre machine
locale, la m<>me syntaxe est utilis<69>e, mais invers<72>e&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> scp machine.monlabo.fr:tagada.txt .
</pre>
<p class="continue">
Le . (point) <20> la fin signifie que <code>scp</code> devra mettre le
fichier <em>ici</em>, dans le r<>pertoire dans lequel vous vous trouvez
actuellement. <20>videmment, vous pouvez lui indiquer un autre
r<EFBFBD>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<6E>re
modification&nbsp;: le <date value="$Date: 2003-07-19 11:03:18 $" />.</div>
</body>
</html>