From efe8af1d530394ea90b9db74c1be2ad8cc935a5c Mon Sep 17 00:00:00 2001 From: "Phyks (Lucas Verney)" Date: Mon, 14 Oct 2013 00:07:38 +0200 Subject: [PATCH] Update de la page sur SSH --- internet/loin/ssh.tml | 213 +++++++++++++++++++++++++----------------- 1 file changed, 125 insertions(+), 88 deletions(-) diff --git a/internet/loin/ssh.tml b/internet/loin/ssh.tml index ea2a23d..eab515b 100644 --- a/internet/loin/ssh.tml +++ b/internet/loin/ssh.tml @@ -11,7 +11,7 @@

Connexion à distance sécurisée

-SSH est un logiciel (et un protocole) permettant de se connecter à un ordinateur distant de façon sécurisée. Il vous permet en particulier d'ouvrir un shell à distance sur le serveur des élèves, clipper. +SSH est un logiciel (et un protocole) permettant de se connecter à un ordinateur distant de façon sécurisée. Il vous permet en particulier d'ouvrir un shell à distance sur une des machines de l'ENS, trolle.ens.fr par exemple.

À savoir : le protocole SSH n'est pas une @@ -20,6 +20,13 @@ href="http://www.eleves.ens.fr/wintuteurs/">WinTuteurs, le tutorial sur PuTTY (Windows).
+
+Note : Sur cette page, il est question de SSH1 et de SSH2. Depuis quelques années déjà toutes les machines de l'ENS utilisent SSH2 et ce protocole est devenu le nouveau standard. Les informations sur SSH1 ne sont là qu'en cas de besoins vraiment particuliers. +
+ +
+ Note : Sur cette page, la machine trolle.ens.fr sera utilisée pour les démonstrations. Sachez que vous pouvez vous connecter de la même façon sur n'importe quelle machine des salles informatiques (le nom de la machine étant marqué dessus). Vous pouvez également vous connecter sur sas.eleves.ens.fr qui remplace l'ancien accès à clipper mais cette machine n'étant pas physique, il est conseillé de se connecter sur une des machines des salles informatiques pour effectuer des tâches gourmandes en ressources. +

Se connecter

@@ -34,9 +41,9 @@ entend la machine devant laquelle vous vous trouvez. Dans ce tutorial, on l'appelle machineloc. La machine distante, c'est celle à laquelle vous voulez vous connecter. Dans ce tutorial, on l'appelle machinedist. Par exemple, si vous êtes dans -votre thurne et que vous voulez vous connecter à clipper, +votre thurne et que vous voulez vous connecter à une machine de l'ENS (trolle.ens.fr), la machine locale est votre propre ordinateur, la machine distante est -clipper. +trolle.ens.fr. @@ -54,9 +61,9 @@ On peut aussi utiliser la syntaxe équivalente :

Pour indiquer la machine à distance, vous pouvez utiliser aussi bien -le nom de la machine (clipper.ens.fr, -horus.ens.fr, etc.) que son adresse IP (pour clipper, -129.199.129.1). +le nom de la machine (sas.eleves.ens.fr, trolle.ens.fr, +horus.ens.fr, etc.) que son adresse IP (pour trolle.ens.fr, +129.199.129.38).

Si vous avez le même login sur les deux machines en question, ce @@ -76,13 +83,13 @@ sur cette machine, vous verrez un message tel que celui-ci : machineloc ~ $ ssh toto@machinedist The authenticity of host 'machinedist' (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)? +Are you sure you want to continue connecting (yes/no)?

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. ssh vous dira alors : +continuer (si vous êtes sûr de votre connexion). ssh vous dira alors :

@@ -93,8 +100,8 @@ the list of known hosts.
 

Ce qui signifie que ssh ne vous embêtera plus à poser la question. Notez au passage le « RSA1 » entre parenthèses. Il s'agit du -type de clef utilisée par la machine distante. Cette information peut -vous servir par la suite pour générer une clef. +type de clé utilisée par la machine distante. Cette information peut +vous servir par la suite pour générer une clé.

@@ -108,8 +115,8 @@ défaut, ssh vous le réclamera.

-clipper ~ $ ssh machine.monlabo.fr
-toto@machine's password: 
+trolle.ens.fr ~ $ ssh machine.monlabo.fr
+toto@machine's password:
 

@@ -117,44 +124,48 @@ Il vous suffit de taper votre mot de passe. Attention, pour des raisons de sécurité (un coup d'œ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 Ctrl+u et retapez -le en entier. Si vous avez tapé correctement votre mot de passe, vous +erreur dans votre mot de passe, faites Ctrl+u 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 « Permission denied. » et il faudra recommencer.

-

Authentification par clef publique

+

Authentification par clé publique

-Une autre méthode utilise ce qu'on appelle une « clef publique », +Une autre méthode utilise ce qu'on appelle une « clé publique », c'est-à-dire un code qui vous identifie. Si vous suivez la procédure décrite ci-dessous, vous pourrez vous connecter par ssh -sur une machine distante sans avoir à taper de mot de passe. +sur une machine distante sans avoir à taper de mot de passe. De plus, +cette méthode permet de se connecter sur plusieurs machines avec la même +clé, ce qui peut être pratique. Enfin, utiliser une clé publique augmente +(légèrement) la sécurité en cas de compromission du serveur : celui-ci ne peut +pas récupérer votre mot de passe.

-

Type de clef

+

Type de clé

Il existe différentes versions de SSH. Suivant le type de version -utilisé sur la machine distante, le type de clef à générer +utilisé sur la machine distante, le type de clé à générer diffère. Cette information vous est donnée par exemple lors de votre première connexion ssh sur cette machine (voir ci-dessus). Si vous ne vous en souvenez plus, -sachez que SSH1 utilisegénéralement des clefs RSA1, et SSH2 des clefs -DSA. Pour connaître la version de SSH utilisée sur la machine +sachez que SSH1 utilise généralement des clés RSA1, et que SSH2 peut utiliser des clés +RSA ou DSA. Pour connaître la version de SSH utilisée sur la machine distante, tapez ssh -v sur la machine distante.

À l'ENS, depuis décembre 2003, les ordinateurs utilisent SSH2. Si vous -aviez déjà une clef publique pour vous connecter à l'ENS, il vaut -mieux en changer. Il vous suffit de générer une nouvelle clef, de type -DSA, et de suivre de nouveau la procédure ci-dessous. +aviez déjà une clé publique pour vous connecter à l'ENS, il vaut +mieux en changer. Il vous suffit de générer une nouvelle clé, de type +RSA (chiffrement recommandé), et de suivre de nouveau la procédure ci-dessous.
-clipper ~ $ ssh -v
+trolle.ens.fr ~ $ ssh -v
 OpenSSH_3.7.1p2, SSH protocols 1.5/2.0, OpenSSL 0.9.7c 30 Sep 2003
 Usage: ssh [options] host [command]
 <...>
@@ -165,12 +176,12 @@ Le « SSH protocols 1.5/2.0 » vous indique qu'il s'agit d'un
 ssh récent qui peut faire du SSH1 ou du SSH2.
 

-

Générer la clef

+

Générer la clé

Pour ce faire, commencez par taper la commande ssh-keygen (comme key generator) sur la machine -locale (et pas sur la machine à distance). +locale (et pas sur la machine distante).

@@ -179,95 +190,103 @@ locale (et pas sur la machine à distance).
 
 

Avec un ssh récent, qui peut faire du SSH1 ou du SSH2, il -faut indiquer le type de clef à générer (voir ci-dessus). Par exemple, -pour générer une clef DSA (SSH2) : +faut indiquer le type de clé à générer (voir ci-dessus). Par exemple, +pour générer une clé RSA (recommandé) :

+
+machineloc ~ $ ssh-keygen -t rsa
+
+ +

Pour générer une clé de type DSA, il suffit d'utiliser la commande suivant à la place :

 machineloc ~ $ ssh-keygen -t dsa
 
+

Notez également qu'il est possible de spécifier la taille de la clé (en bits) avec le paramètre -b X où X est un nombre de bits à choisir parmi (par exemple) 1024, 2048 (minimum recommandé), 4096.

+

-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 $HOME/.ssh/id_dsa pour -SSH2 et $HOME/.ssh/identity pour SSH1 : +Le générateur de clés va en générer deux, une clé publique et une +clé privée. Il va placer la clé privée (sous forme chiffrée) dans un +endroit qui, par défaut, est $HOME/.ssh/id_rsa pour +SSH2 et une clé chiffrée en RSA et $HOME/.ssh/identity pour SSH1 :

-machineloc ~ $ ssh-keygen -t dsa
-Generating public/private dsa key pair.
-Enter file in which to save the key (/usr/home/toto/.ssh/id_dsa): 
+machineloc ~ $ ssh-keygen -t rsa
+Generating public/private rsa key pair.
+Enter file in which to save the key (/usr/home/toto/.ssh/id_rsa):
 

Appuyez sur Enter pour accepter la -localisation de la clef (il est plus simple d'accepter la localisation +localisation de la clé (il est plus simple d'accepter la localisation proposée). ssh-keygen vous demande ensuite une « passphrase » (équivalent d'un mot de passe, mais sous -forme de phrase). Cette phrase sert à fortifier la clef pour la rendre +forme de phrase). Cette phrase sert à fortifier la clé pour la rendre plus difficilement cassable. À partir de là, deux solutions :

  • si vous tapez une phrase, votre connection sera plus sûre, mais vous devrez utiliser ssh-agent pour ne pas avoir à la -retaper à chaque fois (voir plus bas)
  • +retaper à chaque fois (voir plus bas). Si votre clé privée est récupérée, elle ne peut pas être utilisée sans la passphrase associée.
  • vous ne tapez pas de phrase (et appuyez seulement sur -Enter), votre connexion sera moins sûre
  • +Enter), votre connexion sera moins sûre. N'importe qui ayant accès à votre clé privée pourra se connecter en s'identifiant à votre place.

Que vous tapiez une phrase ou pas, à la fin vous verrez quelque chose comme 

-Your identification has been saved in /usr/home/toto/.ssh/id_dsa.
-Your public key has been saved in /usr/home/toto/.ssh/id_dsa.pub.
+Your identification has been saved in /usr/home/toto/.ssh/id_rsa.
+Your public key has been saved in /usr/home/toto/.ssh/id_rsa.pub.
 The key fingerprint is:
 1a:2a:3e:4a:1a:65:1c:89:10:92:9c:5c:1f:75:cc:de
 toto@machineloc
 
-

Que faire de la clef

+

Que faire de la clé ?

Si l'on récapitule, ssh-keygen a généré deux -clefs :

+clés :

    -
  • une clef privée (chiffrée si vous avez donné une phrase, non +
  • une clé privée (chiffrée si vous avez donné une phrase, non chiffrée sinon) qui est $HOME/.ssh/identity (ou -$HOME/.ssh/id_dsa si c'est du SSH2) et qui n'est -accessible qu'à vous
  • +$HOME/.ssh/id_rsa si c'est du SSH2) et qui n'est +accessible qu'à vous. -
  • une publique (non chiffrée) qui est -$HOME/.ssh/id_dsa.pub (ou +
  • une clé publique (non chiffrée) qui est +$HOME/.ssh/id_rsa.pub (ou $HOME/.ssh/identity.pub si c'est du SSH1) et qui peut -être lue par tout le monde
  • +être lue par tout le monde.
Définition : qu'est-ce que ce -« $HOME » ? $HOME est ce qu'on appelle une +« $HOME » ? $HOME (ou ~) est ce qu'on appelle une variable d'environnement, qui sert à indiquer aux programmes quel est votre répertoire personnel (la racine de votre compte). Faites -echo $HOME pour savoir quel est le vôtre. Sur -clipper, c'est +echo $HOME dans un terminal sur une machine de l'ENS +pour savoir quel est le vôtre. Par exemple, sur les machines de l'ENS, c'est /users/promo/matiere/login. Pour en savoir plus, voir l'article « Concept : -arborescence » dans le n°3 du Hublot. +arborescence » dans le n°3 du Hublot.

Maintenant, sur la machine distante, allez dans le -répertoire .ssh et éditez le fichier +répertoire ~/.ssh et éditez le fichier authorized_keys : ajoutez à la fin, et sur une seule ligne (attention aux éditeurs qui coupent les -lignes) la clef publique (identity.pub pour SSH1 ou -id_dsa.pub pour SSH2) que vous venez de générer. Procédez +lignes) la clé publique (identity.pub pour SSH1 ou +id_rsa.pub pour SSH2) que vous venez de générer (attention, +il faut bien ajouter la clé publique et non la clé privée !). Procédez ainsi pour toutes les machines distantes auxquelles vous voulez vous connecter sans avoir à taper votre mot de passe. Et voilà !

@@ -276,11 +295,11 @@ connecter sans avoir à taper votre mot de passe. Et voilà !

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 ssh-agent. +connexion est plus sûre, votre clé privée ne peut pas être usurpée. Mais vous devez taper à chaque fois ladite +phrase... ce qui est vite pénible. Solution, utiliser ssh-agent.

-

D'abord, il faut lancer ssh-agent, qui gère les clefs +

D'abord, il faut lancer ssh-agent, qui gère les clés d'identification. Si vous êtes logué dans une salle informatique de l'ENS avec la config conscrits, pas de problème, ssh-agent est déjà lancé. Si ce n'est pas le cas, il faut @@ -288,7 +307,7 @@ le lancer vous-même.

-Comme l'agent est disponible dans tous les programmes qui découlent, +Comme l'agent est disponible dans tous les programmes lancés ultérieurement, on le lance au début d'une session. Par exemple, quand vous êtes en mode texte et que vous lancez le serveur X :

@@ -308,28 +327,30 @@ Quand vous vous loguez à distance, c'est plutôt :

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 ssh-add. On vous demande +votre clé à gérer en tapant ssh-add. On vous demande alors votre phrase de passe :

 machine ~ $ ssh-add
-Need passphrase for /home/toto/.ssh/identity (toto@machine)
+Need passphrase for /home/toto/.ssh/id_rsa (toto@machine)
 Enter passphrase:
-Identity added: /home/toto/.ssh/identity (toto@machine)
+Identity added: /home/toto/.ssh/id_rsa (toto@machine)
 
+

Note : Les dernières versions des environnements de bureau sous Linux possèdent leur propre interface graphique qui sert de surcouche à ssh-agent. Par exemple, seahorse (ou Trousseau de clé Gnome) tient ce rôle dans Gnome. L'utilisation de ssh-agent peut alors être facilitée, notamment car ces logiciels déverrouillent les clés SSH avec le mot de passe de login directement.

+

Exécution d'une commande à distance

Vous pouvez également utiliser ssh pour exécuter une -commande à distance. Par exemple, vous voulez, de votre machine -personnelle, connaître l'heure sur clipper, pour savoir si votre +commande à distance. Par exemple, si vous voulez, de votre machine +personnelle, connaître l'heure sur trolle.ens.fr, pour savoir si votre machine est en retard, en avance ou à l'heure.

-machineloc ~ $ ssh clipper.ens.fr date
+machineloc ~ $ ssh trolle.ens.fr date
 Fri Jul  4 12:01:49 MET DST 2003
 
@@ -337,7 +358,7 @@ Fri Jul 4 12:01:49 MET DST 2003 N'oubliez pas de préciser toto@machine si vos logins sont différents entre les deux machines. Si vous voulez exécuter à distance une commande avec des options, mieux vaut mettre des guillemets. Par -exemple, je veux savoir si brick est une station Sun ou +exemple, je peux savoir si brick est une station Sun ou un PC, en utilisant la commande uname.

@@ -350,6 +371,11 @@ i386 La réponse est « i386 », dénomination utilisée pour les PC.

+

Petite astuce pour IRC : Il est possible de se connecter sur IRC sur une machine de l'ENS directement avec la commande suivante (créer un alias pour plus de facilité) :

+
+machineloc ~ $ ssh login@trolle.ens.fr -t irc
+
+

Message d'erreur

@@ -368,12 +394,12 @@ Please contact your system administrator.

-Ce message signifie que la clef ssh (l'identification) de la machine +Ce message signifie que la clé ssh (l'identification) de la machine distante a changé. En effet, à chaque fois que vous vous connectez à une machine par ssh, 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 +réellement changé de clé 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.

@@ -407,15 +433,15 @@ distante, faites :

Attention, n'oubliez pas les deux points à la fin. Vous devrez taper votre mot de passe (sauf si vous utilisez -l'authentification par clef publique, voir ci-dessus), puis +l'authentification par clé publique, voir ci-dessus), puis ssh se lancera dans le transfert en vous indiquant sa progression :

 machineloc ~ $ scp tagada.txt machinedist:
-toto@machinedist's password: 
-tagada.txt       100% |***************************************| 2263       00:00    
+toto@machinedist's password:
+tagada.txt       100% |***************************************| 2263       00:00
 
@@ -458,6 +484,13 @@ Maintenant, nous allons envoyer notre fichier tagada.txt machineloc ~ $ scp tagada.txt machinedist:divers/blagues
+

+ Et même vers n'importe quel répertoire (/bidule par exemple où / est la racine de la machine) : +

+
+machineloc ~ $ scp tagada.txt machinedist:/bidule
+
+

De la machine distante à la machine locale

Pour rapatrier des fichiers de la machine distante à votre machine @@ -496,7 +529,7 @@ le transfert machine locale -> machine distante, décrites ci-dessus.

par exemple

-
sftp://conscrit@clipper.ens.fr/users/06/maths/conscrit/
+
sftp://conscrit@trolle.ens.fr/users/06/maths/conscrit/

Une boîte de dialogue apparaît si nécessaire pour vous demander votre mot de passe. Vous pouvez ensuite copier, @@ -507,22 +540,26 @@ le transfert machine locale -> machine distante, décrites ci-dessus. gestion de fichiers de KDE, par exemple celles auxquelles font appel les fonctions Ouvrir et Enregistrer des divers logiciels.

+

Sous Gnome

+ +

La même chose est possible sous Gnome, en passant par le menu "Connexion à un serveur" du gestionnaire de fichiers Nautilus.

+

Créer des alias

Quand on utilise beaucoup la connexion distante, il devient très vite fastidieux d'avoir toujours à taper en entier le nom -clipper.ens.fr, a fortiori son adresse IP -129.199.129.1. S'il n'y a pas d'ambiguïté (en l'occurrence, -si vous n'utilisez jamais qu'un seul serveur portant le nom de clipper, -et pas, par exemple, clipper.ens.fr et clipper.chezmoi.fr), vous pouvez +trolle.ens.fr, a fortiori son adresse IP +129.199.129.38. S'il n'y a pas d'ambiguïté (en l'occurrence, +si vous n'utilisez jamais qu'un seul serveur portant le nom de trolle, +et pas, par exemple, trolle.ens.fr et trolle.chezmoi.fr), vous pouvez assigner un alias à une adresse. Pour ce faire, mettez dans le fichier $HOME/.ssh/config les lignes suivantes :

-Host clipper
+Host trolle
 User toto
-HostName clipper.ens.fr
+HostName trolle.ens.fr
 

@@ -534,7 +571,7 @@ Ainsi, il suffira de taper :

-machineloc ~ $ ssh clipper
+machineloc ~ $ ssh trolle
 

@@ -542,7 +579,7 @@ au lieu de  :

-machineloc ~ $ ssh toto@clipper.ens.fr
+machineloc ~ $ ssh toto@trolle.ens.fr
 

@@ -551,7 +588,7 @@ en effet de taper :

-machineloc ~ $ scp tagada.txt clipper:divers/blagues
+machineloc ~ $ scp tagada.txt trolle:divers/blagues
 

@@ -559,7 +596,7 @@ au lieu de :

-machineloc ~ $ scp tagada.txt toto@clipper.ens.fr:divers/blagues
+machineloc ~ $ scp tagada.txt toto@trolle.ens.fr:divers/blagues
 
@@ -567,9 +604,9 @@ au lieu de :
Mise à jour : à l'ENS, depuis décembre 2003, les -ordinateurs utilisent SSH2. Si vous aviez déjà une clef publique pour +ordinateurs utilisent SSH2. Si vous aviez déjà une clé publique pour vous connecter à l'ENS, il vaut mieux en changer. Il vous suffit de -générer une nouvelle clef, de type DSA, et de suivre +générer une nouvelle clé, de type RSA, et de suivre de nouveau la procédure.
@@ -586,7 +623,7 @@ sûr :