août 06

Si il y a bien un domaine dans lequel j’ai encore tout à apprendre, c’est bien celui du réseau car mon expérience à ce niveau est quasi-nulle ! Malgré ce manque de compétence, je me suis mis en tête de créer mon propre serveur, une idée qui m’oblige donc à me plonger dans de nombreuses documentations.

Pour le moment, je ne fais rien de réellement passionnant, d’un point de vue matériel, le serveur n’est même pas fini : Pas de boîtier, pas de disque dur. Le seul média de stockage qui le compose est une simple clé USB de 8Go. Risible et pas très adéquat mais cela est bien assez pour débuter les hostilités !

Après avoir installer une Debian Squeeze, me voilà donc fin prêt pour tenter l’aventure du serveur personnel ! Cette aventure commence avec la mise en place l’outil SSH pour administrer les serveur à distance. Le protocole SSH est fait pour ça, il le fait de manière sécurisée et sa mise en place est relativement simple, je dis bien « relativement » car j’ai tout de même eu quelques soucis ;) .

Important: Cet article n’est en aucun cas un tutoriel à suivre, il s’agit simplement de mon pense bête. La manière de faire est loin d’être un modèle du genre mais dans mon cas elle fonctionne, libre à vous de vous en inspirer !

Configuration client/serveur :

Coté serveur :

  • Distribution : Debian Squeeze
  • Adresse IP : 192.168.1.13
  • Nom d’utilisateur : tom

Coté client :

  • Distribution : Arch Linux
  • Adresse IP : 192.168.1.10
  • Nom d’utilisateur : david

Installation des composants nécessaires :

Après un premier redémarrage de la Debian fraîchement installée, il est nécessaire d’y ajouter le paquet openssh-server :

# aptitude update && aptitude upgrade
# aptitude install openssh-server

Le service étant démarré automatiquement après installation, il n’y a plus besoin d’avoir un accès physique au serveur.

Un bonne raison pour le mettre dans un coin ;)

Passons à présent au client sur Arch Linux, en installant le nécessaire :

# pacman -S openssh

L’étape d’installation est à présent terminée !

Première connexion :

Avant de me connecter directement au serveur en SSH, je fais un ping pour savoir si l’ensemble client/serveur communique :

$ ping -c 3 192.168.1.13

Tout se passe à merveille ! Il ne reste plus qu’à tenter une connexion à distance :

$ ssh tom@192.168.1.13

Lors de cette étape, il est demandé de saisir un mot de passe d’utilisateur, en l’occurrence, c’est celui de tom. Une fois la connexion établie, il ne reste plus qu’a vous identifier en tant que root pour installer par exemple un serveur Apache ;) .

Configuration du serveur SSH :

Voici des petites modifications que vous pouvez effectuer au fichier /etc/ssh/sshd_config :

# vim /etc/ssh/sshd_config

Désactivation de l’authentification avec le compte root :

PermitRootLogin no

On peut changer le numéro de port 22 utilisé par défaut :

Port 4205

Pas de mot de passe vide :

PermitEmptyPasswords no

Désactivation de l’authentification avec le service PAM :

UsePAM no

On vérifie que la ligne AuthorizedKeysFile ne soit pas commentée :

AuthorizedKeysFile      %h/.ssh/authorized_keys

Pour prendre en compte les modifications, il faut recharger le fichier de configuration à l’aide de la commande suivante :

# /etc/init.d/ssh reload

Bien évidement, si vous changez le port par défaut, il faudra le spécifier lors de votre connexion au serveur :

$ ssh -p 4205 tom@192.168.1.13

Utilisation des clés partagées :

Jusqu’à présent la connexion se fait à l’aide d’un simple mot de passe, d’un point de vue sécurité, ce n’est certainement pas le meilleur choix. Le protocole SSH supporte l’usage des clés privés/publiques pour se connecter au serveur distant. La première étape consiste à créer ce couple de clés en faisant bien attention d’attribuer une passphrase solide:

$ ssh-keygen -t dsa

Les clés générées se trouvent dans le répertoire ~/.ssh :

$ tree ~/.ssh
.ssh
 config
 id_dsa
 id_dsa.pub
 known_hosts

Il faut à présent transférer la clé publique du client au serveur en utilisant le script sh-copy-id, et c’est à partir de là que tout a coincé pour moi :

$ ssh-copy-id -i ~/.ssh/id_dsa.pub tom@191.168.1.13

Cette commande ne m’a renvoyé qu’un joli « time out », je ne connais pas la raison, j’ai donc cherché à transférer cette clé d’une manière plus artisanale, en utilisant la commande scp :

$ scp ~/.ssh/id_dsa.pub  tom@193.168.1.13

Pas de chance, ça ne fonctionne pas non plus !

Après m’être rendu sur différents IRC, un proposition m’a été donné :

$ scp ~/.ssh/id_dsa.pub  tom@192.168.1.13:~/

Et là, ça fonctionne ! Il ne manquait apparemment que le petit ‘:~/‘.

Il ne reste plus qu’à placer la clé dans le bon répertoire, on commence donc par se connecter :

$ ssh tom@192.168.1.13

On crée la répertoire ~/.ssh/ :

$ mkdir ~/.ssh

On copie la clé dans le ficher authorized_keys, puis on lui applique un chmod 600 :

$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

Pour finir, on supprime la clé précédemment copiée :

$ rm ~/id_dsa.pub

Ouf ! Une bonne chose de résolue ! C’est parti, pour un petit test :

$ ssh 192.168.1.13

La passphrase est bien demandée, tout fonctionne à merveille ;) . On peut maintenant supprimer l’authentification par mot de passe dans le fichier de configuration du serveur :

# vim /etc/ssh/sshd_config
PasswordAuthentication no

Authentification avec ssh-agent :

Devoir inscrire sa passphrase à chaque connexion est une tâche relativement… Ennuyeuse. On va donc utiliser l’outil ssh-agent pour pallier à ce problème. Sur la machine cliente faite :

$ ssh-agent
$ ssh-add

La passphrase vous sera demandée une dernière fois. À présent, vous pouvez vous connecter/reconnecter au serveur distant sans être embêter durant toute la session !

Création du fichier ~ssh/config :

Histoire de rendre l’utilisation de la connexion à distance plus agréable, il est possible de remplir un petit fichier de configuration sur la machine cliente :

$ vim ~/.ssh/config
Host Serveur 
Hostname 192.168.1.13
Port 4205
User tom
IdentityFile ~/.ssh/id_dsa

Pour se connecter au serveur il suffira de faire :

$ ssh Serveur

L’article touche à sa fin et comme vous pouvez le voir, il me reste encore beaucoup à apprendre ! En ce qui concerne la configuration du fichier sshd_config, il me reste encore à définir les IP, les utilisateurs ou encore les noms de domaines pouvant avoir accès au serveur. J’ai bien tenté d’ajouter la ligne :

ListenAddress 192.168.1.10

Mais cela a eu pour simple effet de me supprimer l’accès au serveur, ce qui bien évidement n’est pas vraiment voulu ! Je dois également me pencher sur la configuration des fichiers hosts, hosts.allow et hosts.deny sans oublier la prise en main des outils fail2ban et iptables… Bref que du bonheur en perspective ;) .

Même si cet article est loin d’être un exemple à suivre, j’espère que je ne vous ai pas trop ennuyé avec ! Pour finir voici une photographie de mon super serveur :

écrit par David Lopes Ferreira

8 commentaires à “L’histoire d’un débutant en SSH”

  1. Flo Dit:

    Bonjour,

    Petite correction sur la forme :
    « Adresse IP : 190.168.1.13  » dans la présentation de la config. = 190 -> 192.

    Petite précision plus technique :
    La directive « ListenAddress » indique la (ou les) adresse(s) (interface) sur laquelle le serveur ssh écoute, et non celle des machines autorisées à s’y connecter. Pour lister les machines autorisées tu peux jouer avec iptables par exemple.

  2. yoyoTux Dit:

    Hy,

    Je me demande toujours comment tu fais pour poster aussi souvent et de bonne qualité en plus!

    Mon premier et seul article sur mon blog (http://gnuparatux.dyndns.org) concerne « ssh » justement, mais bon je l’ai écrit vite fais.

    Pour ssh-copy-id (avec 2 ‘s’), il faut mettre la partie user@adresseIP entre guillemets.

    $ ssh-copy-id -i ~/.ssh/id_dsa.pub « tom@192.168.1.13″

    Et ne pas oublier de préciser le port si ce n’est pas le 22:

    $ ssh-copy-id -i ~/.ssh/id_dsa.pub « -p 4205 tom@192.168.1.13 »

    Si tu veux faire du 100% Arch, il existe ArchServer http://www.archserver.org/, distribution basée sur Archlinux, mais sans rolling-release pour plus de stabilité, le seul bémol c’est qu’il y a vraiment peu de paquets (ex: zsh).

    @+ et bonne mise en place de ton serveur maison.

  3. Francois Dit:

    Pour l’authentification par clef, je peux te conseiller cette page qui illustre la méthode ssh-copy-id http://drpixel.tuxfamily.org/index.php?2006/07/09/10-ssh-authentification-par-cle

  4. David Lopes Ferreira Dit:

    Oups le « s » est resté dans le clavier lors le l’écriture de cet article ! Merci pour vos remarques ;) .

    Par contre, en ce qui concerne la commande ssh-copy-id, dans aucun tutoriel (wiki debian etc..) il n’est indiqué de mettre l’adresse entre des guillemets… Merci pour l’astuce, je testerais sa véracité lors d’une prochaine installation.

    Pour ce qui est du port, c’était bien évidement celui par défaut (22).

  5. Shyne Dit:

    Salut,

    Penches toi surtout sur iptables et fail2ban, comme indiqué sur cette news: http://www.archlinux.org/news/dropping-tcp_wrappers-support/

    Le support de libwrap ne sont pas cohérents sur les nouveaux services et applications.

  6. Faelar Dit:

    Suggestion pour la clef si la version de debian est suffisement à jour (5.7) : http://fr.wikipedia.org/wiki/ECDSA

  7. Jopa Dit:

    J’aime beaucoup le boitier du serveur… 100 % recyclable, c’est très tendance et écologique !

    Bravo et bonne continuation pour ton blog

  8. appzer0 Dit:

    # $ scp ~/.ssh/id_dsa.pub tom@192.168.1.13:~/
    #
    # Et là, ça fonctionne ! Il ne manquait apparemment que le petit ‘:~/‘.

    En effet, il manque tout simplement le chemin sur la cible.

    « ~ » désigne le répertoire personnel de l’utilisateur en cours (ici ‘/home/tom’ ; en root ce serait ‘/root’). Si tu ne spécifies aucun chemin, ‘scp’ ne sait pas où tu veux envoyer le fichier (et en effet, ça va atterrir où ?).

    Bon courage pour ton serveur, c’est très intéressant à faire.
    J’ai également monté un serveur perso que j’ai détaillé ici : http://blog.appzer0.fr

Laisser une Réponse