Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
documentation:tutorials:ssh:clef_agent_ssh [2020/05/07 18:00] – [Linux / BSD] ltaulelldocumentation:tutorials:ssh:clef_agent_ssh [2023/01/13 10:23] (Version actuelle) – supprimée ccalugar
Ligne 1: Ligne 1:
-====== Utiliser des clefs SSH et un agent-ssh ====== 
  
-Le client SSH s’utilise le plus sou­vent avec un cou­ple ''[utilisateur + mot de passe]'' vers une machine dis­tante.  
- 
-Toute­fois, il est **fortement conseillé** d’utiliser une clef  
-(authen­tifi­ca­tion par clef privée/publique, \\ voir http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique )  
-pour s’authentifier sur la machine dis­tante. \\ De plus, en utilisant un agent SSH, on peut s'éviter de taper ses mots de passe sans arrêt. 
- 
-===== Générer un jeu de clefs ===== 
- 
-Pour générer son jeu de clefs personnel, on utilise les même commandes que pour [[documentation:tutorials:ssh:first_connection|le jeu de clefs internes du PSMN]]  
- 
-<note important>**On ajoute une étape importante** : Une passphrase pour verrouiller la clef privée.</note> 
- 
-Pour Windows, [[documentation:tutorials:ssh:putty|reportez-vous à documentation de PuTTY]]. 
- 
-Pour Linux, BSD et MacOS X, voici les étapes à suivre : 
- 
-==== Étape 1 : Démarrer la génération d'un jeu de clefs ==== 
- 
-Dans un ''Terminal'' : 
- 
-<code bash> 
-user@host:~$ ssh-keygen 
-Generating public/private rsa key pair. 
-Enter file in which to save the key (/home/user/.ssh/id_rsa): 
-            <Appuyer la touche Enter> 
-Created directory '/home/user/.ssh'. 
-Enter passphrase (empty for no passphrase): 
-</code> 
- 
- 
-<WRAP center round info 60%> 
-Les nouveaux paramètres par défaut de ssh peuvent préférer générer une clef de type ''ed25519''. Dans la suite de la documentation, remplacez ''.rsa'' par ''.ed25519''. 
-</WRAP> 
- 
-==== Étape 2 : Choisir une bonne passphrase ==== 
- 
-La passphrase est importante, c'est elle qui verrouille votre clef privée. Une bonne passphrase doit comprendre **au moins 15 caractères** 
- 
-Ceci est une **mauvaise passphrase** : 
-<code> 
-toto 
-</code> 
- 
-Si la passphrase est trop courte, ou trop mauvaise, le programme va répondre : 
-<code bash> 
-Enter same passphrase again:  
-passphrase too short: have 4 bytes, need > 4 
-Saving the key failed: /home/user/.ssh/id_rsa. 
-</code> 
- 
-**failed...** 
- 
-Ceci est une **bonne passphrase** : 
-<code> 
-V0ici 1 ex3mple de passphrase c0mpl1quée, v0ire, alambiquée. 
-</code> 
- 
-Ceci est aussi une **bonne passphrase** : 
-<code> 
-Une bouteille de "Glenfîddich Rare Collection 1937" vaut 15 000 euros TTC. Minimum... 
-</code> 
- 
-==== Étape 3 : Finir la génération du jeu de clefs ==== 
- 
-Et ''ssh-keygen'' de répondre, pour finir : 
-<code bash> 
-Enter same passphrase again:  
-Your identification has been saved in /home/user/.ssh/id_rsa. 
-Your public key has been saved in /home/user/.ssh/id_rsa.pub. 
-</code> 
- 
-Une empreinte de vérification (fingerprint) est également générée (voir ci-dessous) : 
- 
-<code bash> 
-The key fingerprint is: 
-7a:ec:b2:1c:90:f5:2f:77:c5:bc:36:8b:0f:23:2e:76 user@host 
-The key's randomart image is: 
-+--[ RSA 2048]----+ 
-|                 | 
-|                 | 
-|      .          | 
-|     o .       | 
-|    o        | 
-|     . o .   . . | 
-|      o + + + +  | 
-|     ..+o+Eo = o | 
-|      o+.o. ..o  | 
-+-----------------+ 
-</code> 
- 
-==== Étape 4 : Sauvegarder le jeu de clefs ==== 
- 
-Vous pouvez copier/coller l'empreinte de vérification (fingerprint + image) dans un fichier ''~/.ssh/fingerprint'' 
- 
-**Sauvegardez** votre clef privée (''id_rsa''), le fichier d'empreinte (''fingerprint'') et la clef publique (''id_rsa.pub''), dans un endroit sûr et personnel (une clef USB, par exemple). 
- 
-===== Charger l'agent-ssh ===== 
- 
-==== Linux / BSD ==== 
- 
-Il existe tout un tas de méthodes : 
- 
-  * Utiliser les programmes ''ssh-askpass'' ou ''ssh-askpass-gnome'' de votre distribution favorite... 
- 
-ou 
- 
-  * charger l'agent dans un script : 
- 
-<code bash> 
-eval `ssh-agent` 
-ssh-add 
-</code> 
- 
-ou 
- 
-  * Installer et utiliser [[http://www.funtoo.org/wiki/Keychain|keychain]] (outil CLI, prendre l'archive Release). 
- 
-Vous pouvez utiliser un script (dans votre ''~/.bashrc'') pour le démarrer, et l'utiliser automatiquement dans vos terminaux : 
-<code bash> 
-# add key(s) to agent 
-eval `keychain --eval --agents ssh id_rsa` 
-</code> 
- 
-  * KDE Startup script : 
- 
-<code bash> 
-#! /bin/bash 
-# Put this in ~/.kde/Autostart/ssh-agent.sh 
-# or ~/.config/autostart-scripts/ssh-agent.sh 
-export SSH_ASKPASS=/usr/bin/ksshaskpass 
-/usr/bin/ssh-add ~/.ssh/id_rsa  # or any key you want 
-</code> 
- 
-==== MacOS X ==== 
- 
-Sur MacOS X, il existe aussi différentes méthodes : 
- 
-  * Installer et utiliser [[http://www.funtoo.org/wiki/Keychain|keychain]] (outil CLI, prendre le package pour MacOS X). 
- 
-Vous pouvez utiliser un script (dans votre ''~/.bashrc'') pour le démarrer, et l'utiliser automatiquement dans Terminal : 
-<code bash> 
-# add key(s) to agent 
-eval `keychain --eval --agents ssh id_rsa` 
-</code> 
- 
-ou 
- 
-  * Si vous utilisez MacOSX Keychain, ajoutez l'option ''--inherit any'' : 
-<code bash> 
-# add key(s) to agent 
-eval `keychain --eval --agents ssh --inherit any id_rsa` 
-</code> 
- 
-<note important>Si, à chaque ouverture de Terminal, keychain demande votre passphrase, enlevez l'option ''--inherit any''</note> 
- 
-ou 
- 
-  * Installer et utiliser [[http://sshkeychain.sourceforge.net/|SSHKeyChain]] (outil graphique) 
- 
- 
-<note tip>Pour bénéficier de "l'export X", il faut aussi démarrer le serveur X sur le Mac, voir [[documentation:tutorials:ssh:clef_agent_ssh#export_x_pour_macos_x|X11 et MacOS X]]</note> 
- 
- 
- 
-==== Windows ==== 
- 
-Sur Windows, il faut utiliser le logiciel PuTTY/KiTTY, dont l'usage est expliqué [[documentation:tutorials:ssh:putty|sur cette page]]. 
- 
-===== Diffuser la clef publique ===== 
- 
-Pour que le login automatique (ie: sans mot de passe, **mais avec passphrase**) fonctionne, votre clef publique (id_rsa.pub) doit se trouver sur tous les serveurs cibles, dans le fichier ''~/.ssh/authorized_keys''. 
- 
-  * Pour le PSMN, on peut simplement faire comme ceci (le ''/home'' est partagé entre tous les serveurs et noeuds de calculs) : 
- 
-<code bash> 
-scp ~/.ssh/id_rsa.pub votrelogin@allo-psmn:~/.ssh/authorized_keys 
- 
-  votrelogin@allo-psmn's password: 
-  id_rsa.pub                    100%  9KB 9.3KB/  00:00 
-</code> 
- 
-<note important>Cela **écrase** le fichier ''~/.ssh/authorized_keys'' existant. Pour **ajouter** votre clef publique au fichier ''~/.ssh/authorized_keys'' existant, utilisez les commandes suivantes :</note> 
- 
-<code bash> 
-scp ~/.ssh/id_rsa.pub votrelogin@allo-psmn:~/.ssh/id_rsa.pub 
-  votrelogin@allo-psmn's password: 
-  id_rsa.pub                    100%  9KB 9.3KB/  00:00 
-</code> 
- 
-<code bash> 
-ssh votrelogin@allo-psmn 
-  votrelogin@allo-psmn's password: 
- 
-> cat .ssh/id_rsa.pub >> .ssh/authorized_keys 
-> exit 
-</code> 
- 
-Si vous avez bien chargé votre agent-ssh, vous pouvez maintenant vous connecter sur ''allo-psmn'', sans fournir votre mot de passe : 
- 
-<code bash> 
-user@host:~$ ssh votrelogin@allo-psmn.ens-lyon.fr 
-</code> 
-(votrelogin correspond à votre login au PSMN) 
- 
-===== Exemples et Cas particuliers ===== 
- 
-==== Exemple de configuration pour Linux et BSD==== 
- 
-On peut automatiser les étapes de la connexion en utilisant le fichier ''config'' de SSH sur votre poste de travail. En voici un exemple : 
- 
-  * ''~/.ssh/config'' **pour Linux ou BSD** 
- 
-<code bash config> 
-Host * 
-  ServerAliveInterval 60 
-  ForwardX11Timeout 1d 
-  TCPKeepAlive yes 
-  ForwardAgent yes 
-  ForwardX11 yes         # pour Linux 
-#  ForwardX11Trusted yes # pour MacOSX 
-  Compression yes 
-  StrictHostKeyChecking no 
-  HashKnownHosts no 
- 
-### 
-# passerelle interne 
-Host allo-psmn 
-  User <login PSMN> 
-  HostName allo-psmn.psmn.ens-lyon.fr 
- 
-# connexion à x5650comp1 depuis l'interieur de l'ENS 
-Host comp1 
-  User <login PSMN> 
-  Hostname x5650comp1 
-  ProxyCommand ssh <login PSMN>@allo-psmn netcat -w1 %h %p 
- 
-# connexion à e5-2670comp2 depuis l'interieur de l'ENS 
-Host comp2 
-  User <login PSMN> 
-  Hostname e5-2670comp2 
-  ProxyCommand ssh <login PSMN>@allo-psmn netcat -w1 %h %p 
- 
-### 
-# passerelle externe 
-Host allo-externe 
-  User <login PSMN> 
-  ProxyCommand ssh <login PSMN>@ssh.psmn.ens-lyon.fr tcpconnect allo-psmn %p 
-#  User <login ENS> 
-#  ProxyCommand ssh <login ENS>@ssh.ens-lyon.fr tcpconnect allo-psmn %p 
- 
-# connexion à x5650comp1 depuis l'exterieur de l'ENS 
-Host comp1-ext 
-  User <login PSMN> 
-  HostName x5650comp1 
-  ProxyCommand ssh <login PSMN>@allo-externe netcat -w1 %h %p 
- 
-# connexion à e5-2670comp2 depuis l'exterieur de l'ENS 
-Host comp2-ext 
-  User <login PSMN> 
-  Hostname e5-2670comp2 
-  ProxyCommand ssh <login PSMN>@allo-externe netcat -w1 %h %p 
- 
-</code> 
- 
-Bien évidemment, il faut remplacer ''<login PSMN>'' par votre login du PSMN, et ''<login ENS>'' par votre login de l'ENS. ''netcat -w1'' peut être remplacé par ''tcpconnect''. 
- 
-La liste des serveurs de connexion du PSMN est disponible [[documentation:clusters:services#serveurs_de_compilation|sur cette page]]. 
- 
-Ce fichier contient déjà des rebonds. Pour plus d'explication, la documentation sur les rebonds et leur automatisation est disponible [[documentation:tutorials:ssh:multihop_ssh|sur cette page]]. 
- 
-==== Exemple de configuration pour MacOS X ==== 
- 
-Sur MacOS X, il vaut mieux utiliser l'option ''-Y'' au lieu de ''-X'' (ou ''ForwardX11Trusted yes'' au lieu de ''ForwardX11 yes'' dans votre fichier ''~/.ssh/config''). En voici un exemple : 
- 
-  * ''~/.ssh/config'' **pour MacOS X** 
- 
-<code bash config> 
-Host * 
-  ServerAliveInterval 60 
-  ForwardX11Timeout 1d 
-  TCPKeepAlive yes 
-  ForwardAgent yes 
-#  ForwardX11 yes       # pour Linux 
-  ForwardX11Trusted yes # pour MacOSX 
-  Compression yes 
-  StrictHostKeyChecking no 
-  HashKnownHosts no 
- 
-### 
-# passerelle interne 
-Host allo-psmn 
-  User <login PSMN> 
-  HostName allo-psmn.psmn.ens-lyon.fr 
- 
-# connexion à x5650comp1 depuis l'interieur de l'ENS 
-Host comp1 
-  User <login PSMN> 
-  Hostname x5650comp1 
-  ProxyCommand ssh <login PSMN>@allo-psmn netcat -w1 %h %p 
- 
-# connexion à e5-2670comp2 depuis l'interieur de l'ENS 
-Host comp2 
-  User <login PSMN> 
-  Hostname e5-2670comp2 
-  ProxyCommand ssh <login PSMN>@allo-psmn netcat -w1 %h %p 
- 
-### 
-# passerelle externe 
-Host allo-externe 
-  User <login PSMN> 
-  #HostName allo-psmn 
-  ProxyCommand ssh <login PSMN>@ssh.psmn.ens-lyon.fr tcpconnect allo-psmn %p 
- 
-# connexion à x5650comp1 depuis l'exterieur de l'ENS 
-Host comp1-ext 
-  User <login PSMN> 
-  HostName x5650comp1 
-  ProxyCommand ssh <login PSMN>@allo-externe netcat -w1 %h %p 
- 
-# connexion à e5-2670comp2 depuis l'exterieur de l'ENS 
-Host comp2-ext 
-  User <login PSMN> 
-  Hostname e5-2670comp2 
-  ProxyCommand ssh <login PSMN>@allo-externe netcat -w1 %h %p 
- 
-</code> 
- 
-Bien évidemment, il faut remplacer ''<login PSMN>'' par votre login au PSMN. ''netcat -w1'' peut être remplacé par ''tcpconnect''. 
- 
-La liste des serveurs de connexion du PSMN est disponible [[documentation:clusters:services#serveurs_de_compilation|sur cette page]] 
- 
-Ce fichier contient déjà des rebonds. Pour plus d'explication, la documentation sur les rebonds et leur automatisation est disponible [[documentation:tutorials:ssh:multihop_ssh|sur cette page]]. 
- 
-==== export X pour MacOS X ==== 
- 
-Pour pouvoir utiliser "l'export X" sur un Mac, il faut démarrer le logiciel X11 (dans Applications/Utilitaires, comme Terminal) avant d'initier une connexion SSH. 
- 
-==== Rebonds et multiples rebonds ==== 
- 
-Pour plus d'explication, la documentation sur les rebonds et leur automatisation est disponible [[documentation:tutorials:ssh:multihop_ssh|sur cette page]]. 
documentation/tutorials/ssh/clef_agent_ssh.1588867235.txt.gz · Dernière modification : 2020/08/25 17:58 (modification externe)