Ceci est une ancienne révision du document !
Le client SSH s’utilise le plus souvent avec un couple [utilisateur + mot de passe]
vers une machine distante.
Toutefois, il est fortement conseillé d’utiliser une clef
(authentification par clef privée/publique,
voir http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique )
pour s’authentifier sur la machine distante.
De plus, en utilisant un agent SSH, on peut s'éviter de taper ses mots de passe sans arrêt.
Pour générer son jeu de clefs personnel, on utilise les même commandes que pour le jeu de clefs internes du PSMN .
Pour Windows, reportez-vous à documentation de PuTTY.
Pour Linux, BSD et MacOS X, voici les étapes à suivre :
Dans un Terminal
:
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):
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
.
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 :
toto
Si la passphrase est trop courte, ou trop mauvaise, le programme va répondre :
Enter same passphrase again: passphrase too short: have 4 bytes, need > 4 Saving the key failed: /home/user/.ssh/id_rsa.
failed…
Ceci est une bonne passphrase :
V0ici 1 ex3mple de passphrase c0mpl1quée, v0ire, alambiquée.
Ceci est aussi une bonne passphrase :
Une bouteille de "Glenfîddich Rare Collection 1937" vaut 15 000 euros TTC. Minimum...
Et ssh-keygen
de répondre, pour finir :
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.
Une empreinte de vérification (fingerprint) est également générée (voir ci-dessous) :
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 S + | | . o . . . | | o + + + + | | ..+o+Eo = o | | o+.o. ..o | +-----------------+
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).
Il existe tout un tas de méthodes :
ssh-askpass
ou ssh-askpass-gnome
de votre distribution favorite…ou
eval `ssh-agent` ssh-add
ou
Vous pouvez utiliser un script (dans votre ~/.bashrc
) pour le démarrer, et l'utiliser automatiquement dans vos terminaux :
# add key(s) to agent eval `keychain --eval --agents ssh id_rsa`
#! /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
Sur MacOS X, il existe aussi différentes méthodes :
Vous pouvez utiliser un script (dans votre ~/.bashrc
) pour le démarrer, et l'utiliser automatiquement dans Terminal :
# add key(s) to agent eval `keychain --eval --agents ssh id_rsa`
ou
–inherit any
:# add key(s) to agent eval `keychain --eval --agents ssh --inherit any id_rsa`
–inherit any
ou
Sur Windows, il faut utiliser le logiciel PuTTY/KiTTY, dont l'usage est expliqué sur cette page.
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
.
/home
est partagé entre tous les serveurs et noeuds de calculs) :scp ~/.ssh/id_rsa.pub votrelogin@allo-psmn:~/.ssh/authorized_keys votrelogin@allo-psmn's password: id_rsa.pub 100% 9KB 9.3KB/s 00:00
~/.ssh/authorized_keys
existant. Pour ajouter votre clef publique au fichier ~/.ssh/authorized_keys
existant, utilisez les commandes suivantes :
scp ~/.ssh/id_rsa.pub votrelogin@allo-psmn:~/.ssh/id_rsa.pub votrelogin@allo-psmn's password: id_rsa.pub 100% 9KB 9.3KB/s 00:00
ssh votrelogin@allo-psmn votrelogin@allo-psmn's password: > cat .ssh/id_rsa.pub >> .ssh/authorized_keys > exit
Si vous avez bien chargé votre agent-ssh, vous pouvez maintenant vous connecter sur allo-psmn
, sans fournir votre mot de passe :
user@host:~$ ssh votrelogin@allo-psmn.ens-lyon.fr
(votrelogin correspond à votre login au PSMN)
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 BSDHost * 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
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 sur cette page.
Ce fichier contient déjà des rebonds. Pour plus d'explication, la documentation sur les rebonds et leur automatisation est disponible sur cette page.
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 XHost * 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
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 sur cette page
Ce fichier contient déjà des rebonds. Pour plus d'explication, la documentation sur les rebonds et leur automatisation est disponible sur cette page.
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.
Pour plus d'explication, la documentation sur les rebonds et leur automatisation est disponible sur cette page.