ssh: usage des clefs, et exemples de tunnels ssh «Sois fainéant (ou conseil à un nourisson)», Coluche, 1977 Contents AVERTISSEMENT SECURITE......................................... 1 1 Gestion des clefs ssh, ou comment s abstenir de rentrer son mot de passe? 2 1.1 Connexions sans mot de passe........................................ 2 1.2 Générer le couple de clefs publique/privée (id_rsa.pub/id_rsa)..................... 2 copier la clef publique id_rsa.pub sur l hôte cible............................. 2 Enfin, ajouter la clef publique au fichier /.ssh/authorized_keys..................... 3 1.3 Connexions sans mot de passe, avec passphrase.............................. 3 2 Astuces et pistes supplémentaires pour ne pas se fatiguer 3 2.1 prendre le même login sur votre portable perso qu au laboratoire.................... 3 2.2 déclarer univ-littoral.fr comme domaine de recherche........................... 4 2.3 mieux : configurer/renseigner le fichier ~/.ssh/config.......................... 4 3 Exemples de tunnels ssh: impression depuis EDUROAM, accès au serveur de jeton matlab 4 3.1 Exemple 1: imprimer depuis le réseau eduroam.............................. 4 3.2 Exemple 2: accéder au serveur de jeton MATLAB............................ 5 3.3 Simplifier le tout(!) : ajuster ~/.ssh/config et le fichier ~/.alias (ou ~/.bashrc)............. 5 ( et d une manière plus général, comment alléger les procédures de connexions ) AVERTISSEMENT SECURITE Il est important de bien comprendre que les manipulations qui suivent entraînent des risques du point de vue sécurité: si une personne vous vole votre clef privée, il a libre accès à votre compte sans mot de passe, depuis n importe quelle machine. Pensez aussi aux autres: je sais que certaines personnes arguent qu ils n ont pas grand chose sur leur comptes labo en tout cas pas de secrets d états, donc peu importe la qualité du mot de passe etc Ok, mais sachez qu une personne mal intentionnée qui aurait un accès indu au serveur du labo. pourrait très probablement occasionner des dégâts qui concernerait tout le laboratoire, voire pire. 1
1 Gestion des clefs ssh, ou comment s abstenir de rentrer son mot de passe? Ceci étant dit, ne pas rentrer systématiquement son mot de passe est intéressant pour ceux qui utilisent de façon intensive les accès via ssh aux différents serveurs: mutt (mail ), calculs ( machines baru nova ), licence à jeton matlab, sauvegardes (via unison ),? 1.1 Connexions sans mot de passe Figure 1: connexion ssh: répertoire et fichiers Remarque : sur un UNIX ( Mac OS, Linux ) tous les les fichiers se trouvent dans le répertoire caché (car le nom du répertoire commence par un «.» ).ssh de votre répertoire d accueil. Pour vérifier que les droits sont corrects : toto@test:~$ ls -a (option -a pour afficher les fichiers/rep. cachés) drwx------ 2 toto test 4096 mars 7 12:14.ssh Ici le répertoire n est bien accessible qu à l utilisateur toto, la clef privée Vous pouvez supprimer ce répertoire et son contenu sans conséquence ( si ce n est d avoir à recommencer les manipulations suivantes :-)) 1.2 Générer le couple de clefs publique/privée (id_rsa.pub/id_rsa) Dans un terminal, taper la commande : ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/toto/.ssh/id_rsa): # Entrée Enter passphrase (empty for no passphrase): #(cf section suivante si non nulle ) Enter same passphrase again: #...une deuxième fois! Your identification has been saved in /home/toto/.ssh/id_rsa. Your public key has been saved in /home/toto/.ssh/id_rsa.pub. The key fingerprint is: 23:3f:65:e0:dd:13:b9:20:8c:74:30:df:41:84:5c:07 copier la clef publique id_rsa.pub sur l hôte cible Tous les coups sont permis cf. comment transférer un fichier, par exemple: toto@mon_portable: scp ~/.ssh/id_rsa.pub mon_login@cible.fr:~/ 2
Enfin, ajouter la clef publique au fichier /.ssh/authorized_keys toto@mon_portable: ssh mon_login@cible.fr # se connecter sur le serveur (cible) mon_login@cible.fr's password: # mon_login@cible.fr: cat id_rsa.pub >> ~/.ssh/authorized_keys # ajout de la clé à la fin du fichier, # (le crée si fichier inexistant) On peut aussi bien entendu utiliser un éditeur pour ajouter la clef à la fin du fichier authorized_keys. (plusieurs clefs sont possibles pour le même compte cible) Vous pouvez réitérer la manipulation sur tous les serveurs que vous utilisez fréquemment et vous connecter désormais sans mot de passe. 1.3 Connexions sans mot de passe, avec passphrase Cette version est la plus sérieuse du point de vue de sécurité. Figure 2: connexion Si vous avez une saisie une «passphrase» lorsque vous avez générez les deux clefs, alors vous êtes dans ce cas de figure. En effet, la méthode exige de renseigner la passphrase (une fois) à chaque session. Vous confiez la passphrase qui protège votre clef privée à «l agent ssh» et ce dernier, autorisera alors toutes les connexions ssh vers les différentes cibles sans mot de passe. Passer la main à l agent ssh : toto@test : ssh-add ~/.ssh/id_rsa Enter passphrase for /home/toto/.ssh/id_rsa: Identity added: /home/toto/.ssh/id_rsa On peut vérifier que la clef privée est bien présente via la commande ssh-add -l ou supprimer des clefs par la commande ssh-add -d <file>. Si l agent ssh ne démarre pas automatiquement em même temps que votre PC, lancez-le avec la commande suivante: toto@test: eval `ssh-agent` 2 Astuces et pistes supplémentaires pour ne pas se fatiguer 2.1 prendre le même login sur votre portable perso qu au laboratoire La connexion au labo : toto@mon_portable : ssh login_labo@piccolo.univ-littoral.fr ( 41 caractères ) deviendrait : login_labo@mon_portable : ssh piccolo.univ-littoral.fr ( 30 caractères ) 3
2.2 déclarer univ-littoral.fr comme domaine de recherche Pour Windows, le domaine de recherche par défaut doit se paramétrer via les propriétés TCP/IP des connexions réseaux du panneau de configuration. Pour les UNIX ajouter la ligne: search univ-littoral.fr dans le fichier /etc/resolv.conf (nécessite les droits administrateur ) La connexion au labo : login_labo@mon_portable : ssh piccolo.univ-littoral.fr ( 30 caractères ) deviendrait : login_labo@mon_portable : ssh piccolo ( 11 caractères ) Enfin, si vous vous connectez via ssh uniquement au laboratoire alors!ssh (4 caractères!) devraient suffire (!commande rappelle la dernière occurrence de commande). 2.3 mieux : configurer/renseigner le fichier ~/.ssh/config # contenu du $HOME/.ssh/config de votre portable Host pic HostName piccolo.univ-littoral.fr User mon_login_labo La connexion s établie simplement avec la commande: toto@mon_portable: ssh pic Vous pouvez multiplier les services dans ce fichier config 3 Exemples de tunnels ssh: impression depuis EDUROAM, accès au serveur de jeton matlab Lorsque vous n êtes pas sur le «bon» réseau (extérieur, EDUROAM ), le tunnel ssh vous permet d accéder malgré tout à des machines dont les services sont soit masqués par le pare-feu de l université, soit simplement disponibles que sur le réseau local du laboratoire. 3.1 Exemple 1: imprimer depuis le réseau eduroam Vous êtes au labo., connecté sur le réseau EDUROAM: vous n avez pas accès au serveur d imprimante ouvrir le tunnel comme suit: ssh -N -f -l votre_login -L 9631:cornet.univ-littoral.fr:631 piccolo.univ-littoral.fr Qu ès aquò? La commande crée un tunnel ssh (port standard 22 - donc non indiqué - du serveur piccolo) en se connectant sur le service d impression de cornet (service cups dont le port standard est 631, inaccessible de l extérieur). Le service cups (port 631) est redirigé sur le port 9631 du localhost de votre portable. Tout se passe comme si le serveur d impression du labo était transféré sur l adresse http://localhost:9631 de votre portable. autres commentaires ( taper la commande man ssh pour plus d information ): -N : simple redirection de port -f : demande l execution en arrière-plan. 4
-l votre_login : votre login de connexion sur piccolo ( login labo ) localhost : toute machine possède une adresse réseau particulière appelée loopback, dont l adresse IP est 127.0.0.1 (taper la commande ping localhost pour vous en convaincre). 9631 : le port de redirection peut-être choisi à votre convenance (1234 aurait pu faire l affaire). Il ne faut pas prendre un port déjà existant ( conflit ) et un nombre > 1024 (les 1024 premiers ports ne peuvent être ouverts que par l administrateur) Ouaip? mais comment j imprime? Toutes les files d impression sont désormais accessibles depuis votre localhost. Prenons l exemple la file hp2 ( HP LaserJet 4200 recto-verso ) # interroger sa disponibilité lpq -U votre_login -h localhost:9631 -Php2 # imprimer le fichier.pdf ( lpr -U votre_login -H localhost:9631 -Php2 fichier.pdf 3.2 Exemple 2: accéder au serveur de jeton MATLAB Vous n êtes pas sur le réseau du laboratoire et vous voulez utilisez Matlab: le service est masqué derrière le pare-feu. Note: pour plus d informations sur l installation et le choix du serveur de jeton, consulter la fiche matlab Pour la version R2014b ( et plus récentes ) de matlab, le tunnel s ouvre comme suit: ssh -f -N -L 27000:localhost:39555 votre_login@biwa.univ-littoral.fr 3.3 Simplifier le tout(!) : ajuster ~/.ssh/config et le fichier ~/.alias (ou ~/.bashrc) éditer (ou créer) le fichier ~/.ssh/config du portable: # matlab versions antérieures à R2014b Host matlab Hostname saxo.univ-littoral.fr LocalForward 27000 127.0.0.1:39555 User votre_login #version >= R2014b Host matlab2 Hostname biwa.univ-littoral.fr LocalForward 27000 127.0.0.1:39555 User votre_login Host print Hostname piccolo.univ-littoral.fr LocalForward 9631 cornet.univ-littoral.fr:631 User votre_login A partir de là les commandes pour ouvrir les tunnels ( impression et matlab ) se réduisent à # acces imprimantes ssh -f -N print # acces à Matlab version >= R2014b ssh -f -N matlab2 Un petit plus : éditer le ~/.bashrc du portable Mac ou Linux 5
# établir les tunnels pour l'impression et accès aux jetons matlab alias tprint='ssh -f -N print' alias tmatlab='ssh -f -N matlab' alias tmatlab2='ssh -f -N matlab2' # alias pour imprimer (une fois le tunnel établi!) # impression recto-verso sur imprimanteq HP 4200 et HP 602M (salle commune) alias imp2='lpr -U votre_login -H localhost:9631 $1 -Php2' alias imp='lpr -U votre_login -H localhost:9631 $1 -Php' #interrogation hp hp2 alias impq2='lpq -U votre_login -h localhost:9631 -Php2' alias impq='lpq -U votre_login -h localhost:9631 -Php' Ainsi, au final, les commandes se résument à : # avant de lancer matlab, ouvrir le tunnel tmatlab # ouverture du tunnel pour les impressions: tprint # imprimer un fichier (recto-verso, sur HP4200) imp2 le_fichier.ps Quelques liens/sources : http://formation-debian.via.ecp.fr/ssh.html http://plm-doc.math.cnrs.fr/doc/spip.php?article39 http://www.tuteurs.ens.fr/internet/loin/tunnel.html 6