Vous êtes sur la page 1sur 24

OpenSSH : Mise en place et

description dtaille d'un serveur SSH

Par Mathieu Androz

Date de publication : 19 mai 2009

Cet article vise apprhender l'installation, la configuration et les diffrentes possibilits


d'utilisation d'OpenSSH sous Linux. Il dtaille les diffrentes options de configuration
offertes par OpenSSH et les diffrents types de connexion un serveur SSH, que ce soit
sous un systme GNU/Linux, Unix ou Windows.
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

I - Introduction..............................................................................................................................................................3
II - Installation et fonctionnement du serveur OpenSSH.............................................................................................4
II-1 - Sur un systme Linux................................................................................................................................... 4
II-2 - Sous Windows, avec Cygwin........................................................................................................................ 4
II-3 - Cygwin pour Windows Vista et Seven.......................................................................................................... 6
III - Configuration du serveur d'OpenSSH...................................................................................................................7
IV - Authentification....................................................................................................................................................12
IV-1 - Par login/mot de passe..............................................................................................................................12
IV-2 - Par change de cls..................................................................................................................................12
IV-2-a - Gnration des cls.......................................................................................................................... 12
IV-2-b - Diffusion de la cl publique............................................................................................................... 13
IV-2-c - Connexion ssh................................................................................................................................... 13
IV-3 - Au revoir mots de passe, passphrase....................................................................................................... 13
IV-3-a - L'authentification sans mot de passe................................................................................................ 14
IV-3-b - Utilisation de ssh-agent..................................................................................................................... 14
IV-3-c - Automatiser l'utilisation de ssh-agent................................................................................................ 15
V - Un peu de scurit.............................................................................................................................................. 16
V-1 - Changer le port d'coute ct serveur....................................................................................................... 16
V-2 - Bloquer l'accs Root par SSH.................................................................................................................16
V-3 - Restreindre l'accs des utilisateurs et/ou groupes spcifiques............................................................... 16
VI - Transfert de fichiers scuris : SCP...................................................................................................................18
VI-1 - Fonctionnement de la commande scp.......................................................................................................18
VI-2 - Scp par un port diffrent du port 22.......................................................................................................... 18
VII - Utiliser une application graphique distance : X11 Forwarding....................................................................... 19
VIII - Utiliser SSH en tant que tunnel scuris : TCP Forwarding............................................................................ 20
IX - Conclusion.......................................................................................................................................................... 22
X - Liens utiles...........................................................................................................................................................23
Remerciements.......................................................................................................................................................... 24

-2-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

I - Introduction

OpenSSH est un ensemble d'outils dvelopps sous licence OpenBSD. Son nom est la contraction d'OpenBSD
Secure SHell. OpenSSH permet d'effectuer des communications scurises travers un rseau, reposant sur le
protocole SSH. OpenSSH offre une solution de remplacement scuris pour rlogin, telnet, rcp et ftp.
OpenSSH est disponible sur un grand nombre de systmes d'exploitation dont BSD, Linux, AIX, HP-UX, Solaris, Mac
OS X, Windows via Cygwin...

SSH est un protocole de communication scurise reposant sur le mode client-serveur. SSH signifie Secure SHell.
SSH offre la confidentialit des changes et l'authentification des correspondants.
Il existe 2 versions du protocole, la version 2 tant largement utilise maintenant.
Le protocole SSH utilise par dfaut le port 22.

-3-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

II - Installation et fonctionnement du serveur OpenSSH

II-1 - Sur un systme Linux

Remarque : La mthode d'installation propose dans cet article repose sur le fonctionnement
de la distribution Debian et ses drivs. Pour les autres distributions, veuillez vous reporter aux
commandes de gestions des paquets implantes pour la distribution choisie.

Installation du serveur OpenSSH :

Installation d'OpenSSH
> apt-get install openssh-server

L'installation du serveur OpenSSH cre un dossier /etc/ssh et gnre un couple de cls RSA :

ssh_host_rsa_key contenant la cl prive du serveur


ssh_host_rsa_key.pub contenant la cl publique du serveur

Lorsqu'un client demande une connexion au serveur, ce dernier envoie au client sa cl publique. Le client utilise alors
la cl publique reue pour envoyer au serveur une cl secrte. Le serveur reoit alors la cl publique et la dcrypte
avec sa cl prive, prouvant ainsi qu'il est bien le serveur.
Pour le prouver au client, le serveur crypte un message type avec la cl publique du client et lui envoie. Si le client
arrive lire le message en le dcryptant avec sa cl priv, il a l'assure de communiquer avec le vritable serveur.
Le canal de commmunication scurise est alors cr.

Si pour une quelconque raison, vous tiez amen devoir gnrer nouveau le couple de cls
du serveur, reportez-vous la partie IV-2-a et nommez les cls ssh_host_rsa_key.

II-2 - Sous Windows, avec Cygwin

Cette partie ne traite pas de ce qu'est Cygwin et comment l'installer mais de comment installer
un serveur SSH sous Cygwin.

Cygwin est une sorte d'mulateur de systme Unix sous Windows. Il est constitu d'un grand nombre
de paquets, logiciels libres existants sous Linux dont OpenSSH. Ainsi, il est possible d'avoir un serveur SSH sous
Windows !

Pour faire fonctionner un serveur SSH sous Cygwin, il est ncessaire de crer les groupes et utilisateurs de Windows
dans Cygwin en copiant ceux-ci de Windows Cygwin :

#Pour les utilisateurs :


mkpasswd -l > /etc/passwd

#Pour les groupes :


mkgroup -l > /etc/group

Il est ncessaire de donner un mot de passe votre utilisateur Windows afin de permettre une
connexion par SSH !

Les groupes et utilisateurs sont maintenant crs.


Il faut maintenant initialiser la configuration du serveur SSH avec cette commande :

-4-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

Initialisation du serveur SSH


ssh-host-config -y

Entrez les informations demandes.


Lorsqu'il vous est demand "CYGWIN=", la rponse entrer est : ntsec tty.

Comme sous Unix/Linux, Windows dispose de variables d'environnement, notamment le PATH. Il est ncessaire
d'diter le PATH et de rajouter le rpertoire des commandes pour Cygwin.
Pour cela, allez dans :
Poste de travail --> Proprits --> Avanc --> Variables d'environnement

Fentre des proprits systme de WIndows XP

Dans la partie "Variables systme", cliquez sur "Nouveau" :


- Le nom de la variable ajouter est : CYGWIN
- La valeur de cette variable est : ntsec tty

Variable CYGWIN

Ensuite, slectionnez PATH dans la liste, cliquez sur "diter" et ajoutez la fin du PATH : C:\Cygwin\bin.

-5-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

Variable PATH

Voila, il ne vous reste plus qu' autoriser le dmarrage du serveur SSH au dmarrage de Windows. Pour cela, utilisez
les commandes :

net start sshd


cygrunsrv -S sshd

II-3 - Cygwin pour Windows Vista et Seven

Les grands changements entre les systmes Windows XP et Vista (puis Seven) ont entrain des problmes dans
l'installation traditionnelle de Cygwin.
Vous trouverez dans cette section les manipulations recommandes par Projet Cygwin afin de faire fonctionner au
mieux Cygwin sur un OS Windows Vista ou Seven.

Pour lancer l'installeur Cygwin sous Windows Vista et Seven, vous devez faire un clic droit sur l'icne d'installation
et choisir l'option : "excuter en tant qu'administrateur".

Egalement, une fois installe, ouvrez une console et excutez ces 6 commandes afin de fixer des problmes de
droits :

Commandes permettant de fixer les problmes de droits sous Vista et Seven


chmod +r /etc/passwd
chmod u+w /etc/passwd
chmod +r /etc/group
chmod u+w /etc/group
chmod 755 /var
touch /var/log/sshd.log
chmod 664 /var/log/sshd.log

Enfin, suite l'excution de la commande ssh-host-config -y, si le script vous renvoie le commentaire suivant : "This
script plans to use cyg_server, Do you want to use a different name?", Rpondez "no" puis entre.

Excutez ensuite la commande suivante : cyglsa-config

Lorsque le script s'arrte et vous demande de dfinir les variables d'environnement pour CYGWIN ("environment
variable CYGWIN="), entrez ceci : ntsec tty
- ntsec est une variable d'environnement utilise par Cygwin afin d'utiliser les rgles de scurit de Windows pour le
contrle des accs utilisateurs aux fichiers et autres programmes.
- tty est une variable d'environnement utilise par Cygwin pour fonctionner correctement avec des diteurs de texte
comme nano ou vi. Sans cela, vous ne pouvez pas insrer de caratres.

-6-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

III - Configuration du serveur d'OpenSSH

La configuration du serveur ssh se rsume en un fichier : /etc/ssh/sshd_config.


La configuration par dfaut du serveur est suffisante son fonctionnement.
Voici une description des diffrents paramtres qui composent le fichier /etc/shh/sshd_config :

Certaines des descriptions suivantes sont issues de la traduction de la manpage de


sshd_config.

Paramtres Description
Port Dsigne le port qu'coute le serveur. Par
dfaut, c'est le port 22.
Protocol Dsigne la version du protocole ssh utilis
par le serveur. Par dfaut, c'est la version 2.
ListenAddress 0.0.0.0 Correspond l'adresse locale d'coute su
serveur sshd en ipv4.
ListenAddress :: Correspond l'adresse locale d'coute su
serveur sshd en ipv6.
AllowUsers Ce mot-clef peut tre suivi d'une liste de
motifs de noms d'utilisateurs, spars par
des espaces. S'il est spcifi, seuls les
noms d'utilisateurs correspondant un
des motifs sont autoriss se connecter.
On peut utiliser les caractres * ou
? comme des jokers. Seuls les noms
d'utilisateurs sont valides ; les identifiants
d'utilisateurs (UID) ne sont pas reconnus.
Par dfaut, la connexion est autorise pour
tous les utilisateurs. Si le motif est de la
forme UTILISATEUR@MACHINE, alors
UTILISATEUR et MACHINE sont vrifis
sparment, en restreignant les connexions
des utilisateurs en particulier provenant de
machines en particulier.
AllowGroups Ce mot-clef peut tre suivi d'une liste de
motifs de noms de groupes, spars par
des espaces. S'il est spcifi, seuls les
utilisateurs dont le groupe principal ou les
groupes supplmentaires correspondent
un des motifs sont autoriss se connecter.
On peut utiliser les caractres * ou ?
comme jokers. Seuls les noms de groupes
sont valides ; les identifiants de groupes
(GID) numriques ne sont pas reconnus. Par
dfaut, la connexion est autorise pour tous
les groupes.
DenyUsers Ce mot-clef est suivi d'une liste de motifs
de noms d'utilisateurs, spars par des
espaces. Les utilisateurs dont le nom
correspond un des motifs ne sont pas
autoriss se connecter. Dans les motifs,
on peut utiliser les caractres * et ?
comme des jokers. On ne spcifie que
des noms d'utilisateurs ; les identifiants
numriques d'utilisateurs ne sont pas
autoriss. Par dfaut, tous les utilisateurs

-7-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

sont autoriss se connecter. Si le motif


est de la forme UTILISATEUR@MACHINE,
UTILISATEUR et MACHINE sont vrifis
sparment, et la connexion est restreinte
certains utilisateurs se connectant de
certaines machines.
DenyGroups Ce mot-clef est suivi d'une liste de motifs de
noms de groupes, spars par des espaces.
Les utilisateurs dont le groupe principal ou
les groupes secondaires correspondent
un des motifs ne sont pas autoriss
se connecter. Dans les motifs, on peut
utiliser les caractres * et ? comme
des jokers. On ne spcifie que des noms
de groupes ; les identifiants numriques
de groupes ne sont pas autoriss. Par
dfaut, tous les groupes sont autoriss se
connecter.
HostKey Dfinit le chemin de la cl prive du serveur.
Par dfaut, /etc/ssh/ssh_host_rsa_key.
UsePrivilegeSeparation Spcifie si sshd spare les privilges en
crant un processus fils non privilgi pour
prendre en charge le trafic rseau entrant.
Aprs une authentification russie, un autre
processus est cr avec les privilges de
l'utilisateur authentifi.
Le but de la sparation de privilges
est d'viter l'escalade de privilges si le
processus non privilgi est corrompu. Par
dfaut, yes.
KeyRegenerationInterval Dans la version 1 du protocole, la clef
phmre du serveur est regnre
automatiquement aprs ce nombre de
secondes (si elle a t utilise).
Le but de la regnration est d'viter le
dcryptage de sessions captures en
s'introduisant plus tard sur la machine et en
volant la clef.
La clef n'est jamais stocke nulle part. Si la
valeur est 0, la clef n'est jamais regnre.
Par dfaut 3600, (secondes).
ServerKeyBits Dfinit le nombre de bits de la clef phmre
pour la version 1 du protocole. La valeur
minimale est 512 et la valeur par dfaut est
768.
SyslogFacility Donne le code de facilit utilis lors de
l'enregistrement des messages du dmon
sshd Les valeurs possibles sont : DAEMON,
USER, AUTH, LOCAL0, LOCAL1, LOCAL2,
LOCAL3, LOCAL4, LOCAL5, LOCAL6,
LOCAL7. Par dfaut, AUTH.
LogLevel Donne le niveau de verbosit utilis lors
de l'enregistrement des messages du
dmon sshd Les valeurs possibles sont :
QUIET, FATAL, ERROR, INFO, VERBOSE,
DEBUG, DEBUG1, DEBUG2 and DEBUG3.
Par dfaut INFO. DEBUG et DEBUG1

-8-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

sont quivalents. DEBUG2 et DEBUG3


spcifient des niveaux plus levs de sortie
de dbogage. L'enregistrement l'aide d'un
niveau DEBUG a tendance empiter sur
la vie prive des utilisateurs et n'est pas
recommand.
LoginGraceTime Dsigne la dure d'inactivit (en minutes) au
bout de laquelle le serveur se dconnecte
automatiquement. Si la valeur est 0 (zro),
le serveur ne se dconnecte jamais. Par
dfaut, 120.
PermitRootLogin Dfinit si oui ou non le super-utilisateur Root
a l'autorisation de se connecter par ssh.
L'argument est yes , without-password
, forced-commands-only ou no . Par
dfaut, yes.
Si cette option est rgle without-
password , l'authentification par mot de
passe est dsactive pour root.
Si cette option est rgle forced-
commands-only , les connexions de root
sont autorises avec une authentification
par clef publique, mais seulement si l'option
command est spcifie (ce qui peut tre
utile pour effectuer des sauvegardes
distance mme si les connexions de root
sont normalement interdites). Toutes les
autres mthodes d'authentification sont
dsactives pour root.
Si cette option est rgle no , root n'est
pas autoris se connecter.
StrictModes Spcifie si sshd doit vrifier les modes et
le propritaire des fichiers de l'utilisateur et
du rpertoire de base (home directory) de
l'utilisateur avant d'accepter une connexion.
C'est normalement souhaitable, parce
que quelquefois, les novices laissent
accidentellement leur rpertoire ou leurs
fichiers en accs complet tout les monde.
Par dfaut, yes.
RSAAuthentication Spcifie si on autorise la pure
authentification RSA. Par dfaut yes .
Cette option ne s'applique qu' la version 1
du protocole.
PubkeyAuthentication> Spcifie si on autorise l'authentification
par clef publique, par opposition
l'authentification par mot de passe. Par
dfaut, yes.
Note : Cette option ne s'applique qu' la
version 2 du protocole.
AuthorizedKeysFile Indique le chemin du fichier contenant les
cls publiques des utilisateurs distants.
IgnoreRhosts Spcifie que l'on n'utilise pas les
RhostsRSAAuthentication fichiers .rhosts et .shosts pour
les authentification actives par
les options RhostsAuthentication

-9-
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

et RhostsRSAAuthentication ou
HostbasedAuthentication.
Les fichiers /etc/hosts.equiv et /etc/ssh/
shosts.equiv sont nanmoins utiliss. Par
dfaut, yes.
HostbasedAuthentication Spcifie si on autorise une authentification
par rhosts ou /etc/hosts.equiv conjointement
avec une authentification de machine cliente
russie par clef publique (authentification
par machines). Cette option est similaire
l'option RhostsRSAAuthentication et ne
s'applique qu' la version 2 du protocole. Par
dfaut, no.
IgnoreUserKnownHosts Spcifie si sshd doit ignorer le
fichier $HOME/.ssh/known_hosts de
l'utilisateur lors des authentifications des
options RhostsRSAAuthentication ou
HostbasedAuthentication. Par dfaut, no.
PermitEmptyPasswords Dfinit si le serveur accepte la connexion
un compte utilisateur ne possdant pas de
mot de passe. Par dfaut, no.
ChallengeResponseAuthentication Spcifie si on autorise l'authentification par
stimulation-rponse (challenge response).
Toutes les formes d'authentification de
login.conf5 sont gres. Par dfaut, yes.
PasswordAuthentication Permet d'autoriser l'authentification par mot
de passe. Par dfaut, yes.
X11Forwarding Permet de rediriger les sorties X11. Cela
permet donc d'ouvrir des applications
graphiques distance par exemple.
La redirection X11 est automatiquement
dsactive si l'option UseLogin est active.
Par dfaut, no.
X11DisplayOffset Spcifie le premier numro d'affichage
disponible pour les redirections X11 de sshd.
Ceci vite sshd d'interfrer avec les vrais
serveurs X11. Par dfaut, 10.
PrintMotd Permet d'afficher le contenu du fichier /etc/
motd (message du jour) la connexion. Par
dfaut, yes
PrintLastLog Permet d'afficher la date et l'heure de la
dernire connexion. Par dfaut, yes.
TCPKeepAlive Permet de garder ouverte une connexion ssh
existante grce l'envoi d'un paquet chiffr
par ssh. Par dfaut, yes.
UseLogin Spcifie si on utilise login pour les
connexions des sessions interactives. Par
dfaut, no.
Note 1 : On n'utilise jamais login pour
l'excution de commandes distance.
Note 2 : Si cette option est active, on
dsactive X11Forwarding parce que login
ne sait pas traiter les cookies xauth. Si on
spcifie l'option UsePrivilegeSeparation, elle
sera dsactive aprs l'authentification.
MaxStartups Spcifie un nombre maximal de
connexions concurrentes au dmon

- 10 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

sshd non authentifies. Les connexions


supplmentaires sont purges si elles
ne peuvent pas s'authentifier ou si le
dlai de grce dfini l'aide de l'option
LoginGraceTime expire pour une connexion.
Par dfaut 10.
Par ailleurs, on peut activer une purge
htive alatoire en spcifiant un triplet
dbut:taux:total (par exemple, 10:30:60
).
sshd refuse les tentatives de connexion
avec une probabilit de taux/100 (30
%) s'il y a dbut (10) connexions non
authentifies en cours. La probabilit
augmente linairement et toutes les
tentatives de connexion sont refuses si le
nombre de connexions non authentifies
atteint total (60).
Banner Pour certaines juridictions, l'envoi d'un
message avant l'authentification est
ncessaire pour disposer d'une protection
lgale.
Le contenu du fichier spcifi est envoy
l'utilisateur distant avant d'autoriser la
connexion. Cette option n'est disponible
qu'avec la version 2 du protocole. Par
dfaut, on n'affiche pas de message.
AcceptEnv Spcifie quelles variables d'environnement
envoyes par le client seront copies dans
l'environnement de la session. Cette option
n'est supporte que par la version 2.
Subsystem sftp Configure un sous-systme externe (par
exemple un dmon de transfert de fichiers).
Les arguments doivent tre un nom de
sous-systme et une commande excuter
lors d'une requte ce sous-systme. La
commande sftp-server8 implmente le sous-
systme de transfert de fichiers sftp . Par
dfaut, aucun sous-systme n'est dfini.
Note : Cette option ne s'applique qu' la
version 2 du protocole.

D'autres options existent. Vous pouvez les retrouver sur la manpage officielle de sshd_config d'OpenSSH.

Comme souvent, le dmarrage, l'arrt et le redmarrage du serveur se font comme ceci, respectivement :

/etc/init.d/ssh start
/etc/init.d/ssh stop
/etc/init.d/ssh restart

- 11 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

IV - Authentification

Diffrentes possibilits existent concernant l'authentification pour la connexion au serveur SSH : l'authentification par
mot de passe et l'authentification par change de cls. Voici comment mettre en place ces deux techniques.

IV-1 - Par login/mot de passe

Cette mthode d'authentification est trs simple, il suffit d'excuter la commande de connexion SSH :

ssh login@nom_du serveur


# ou
ssh login@IP_du_serveur

Lors de la premire connexion SSH au serveur avec ce login, il vous est demand si le fingerprint de la cl publique
du serveur est bon. Si le fingerprint de la cl publique du serveur est bien le mme que celui affich votre cran,
vous pouvez accepter de continuer en tapant yes.
La cl publique du serveur SSH est alors copie dans le fichier ~/.ssh/know_hosts, ceci permettant garder en mmoire
l'authenticit de la cl publique du serveur pour les prochaines connexions.
Ensuite, le mot de passe de l'utilisateur utilis pour se connecter vous est demand.

Premire connexion par SSH - Fingerprint


The authenticity of host '[192.168.0.7] ([192.168.0.7])' can t be established.
RSA key fingerprint is 12:12:m3:df:6f:23:3b:18:99:ea:84:p6:d1:de:f6:71.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.0.7]' (RSA) to the list of known hosts.
root@192.168.0.7 s password:

IV-2 - Par change de cls

Cette mthode d'authentification repose sur la cryptographie asymtrique, par l'utilisation du couple cl prive/cl
publique cr par l'utilisateur client, de la mme faon que le fait le serveur.

IV-2-a - Gnration des cls

SSH propose de gnrer le couple de cls publique/prive en utilisant au choix 2 algorithmes : DSA et RSA.
Utiliser au choix RSA ou DSA.
Pour ce faire, OpenSSH propose un outil de gnration trs simple utiliser : ssh-keygen.

Gnration du couple cl prive / cl publique pour le user client


ssh-keygen -t rsa

A l'excution de cette commande, le couple de cls est gnr. Il vous est alors demand le chemin o vous voulez
stocker ces cls et leur nom. La touche "entre" permet de valider le chemin propos par dfaut.
La cl prive prend les droits 600 et la cl publique 644.
Suite cela, il vous est demand d'entrer une passphrase qui vous permettra de protger votre cl prive. Cette
passphrase peut contenir tout caractre et "mta-caractre", mme des espaces. Elle est retenir car elle vous est
demande chaque connexion par change de cls.

user@debian:~/.ssh$ ssh-keygen -t rsa


Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
f1:68:21:f2:b5:61:c2:cd:22:c4:48:e8:ab:c2:12:z7 user@debian

- 12 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

The key s randomart image is:


+--[ RSA 2048]----+
| o++o |
| o..o.o o |
| . o = + . |
| . . o + |
| . P . S . |
|. = o o |
|.. . . . |
|o.. . |
|.o |
+-----------------+

IV-2-b - Diffusion de la cl publique

Pour permettre l'authentification par change de cls, il est ncessaire de donner votre cl publique au serveur, selon
de principe de la cryptographie asymtrique.
Encore une fois, OpenSSH penser tout et vous offre un outil pour copier votre cl publique au serveur en toute
scurit : ssh-copy-id

ssh-copy-id -i chemin/cl/publique/id_rsa.pub login@serveur_ssh

A cet instant, le fichier known_hosts est alors lu pour voir si la machine est connue. Puis, le mot de passe session de
l'utilisateur "login" est demand et ce sera la dernire fois. Les prochaines connexions avec cet utilisateur se feront
donc par change de cl prive/cl publique et l'aide de la passphrase entre lors de la gnration des cls de
l'utilisateur.

Bien que ssh-copy-id soit conue spcialement pour copier votre cl publique sur le serveur SSH, il est possible
d'effectuer cette tche d'une autre faon, avec scp :

Copie de la cl publique cliente sur le serveur SSH avec scp


scp /home/login/.ssh/id_rsa.pub login@serveur_SSH:/home/login/cl_publique

ssh login@serveur_SSH
cat cl_publique >> /home/login/.ssh/authorized_keys
rm cl_publique

IV-2-c - Connexion ssh

De cette manire donc, la connexion ssh ne se fait plus par login/mot de passe mais grce l'change de cls
prives/cls publiques et l'utilisation de la passphrase.
La commande de connexion reste cependant la mme :

ssh login@nom_du serveur


# ou
ssh login@IP_du_serveur

IV-3 - Au revoir mots de passe, passphrase...

Si vous utilisez ssh rgulirement, vous avez du vous rendre compte que cela devient trs vite fatigant de devoir
retaper chaque connexion ssh son mot de passe ou sa passphrase.
Il existe 2 alternatives ce dsagrment : l'authentification sans mot de passe et ssh-agent.

- 13 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

IV-3-a - L'authentification sans mot de passe

L'authentification sans mot de passe est trs pratique et pratiquement incontournable pour excuter des scripts
distants, par exemple un script shell d'arrt global se connectant tour de rle sur vso diffrents serveurs pour
excuter la commande spcifique d'arrt.
L'authentification sans mot de passe est donc trs efficace mais pose cependant un problme de scurit non
ngligeable.
Son principe est tout simple :
Cela consiste en la gnration d'un couple de cl prive/cl publique, de la mme manire que pour l'authentification
par change de cls et en la diffusion de votre cl publique. Cependant, au moment de rentrer une passphrase comme
il l'est demand au cours de la gnration du couple de cls, vous n'entrez rien et vous faites "Entre". Rptez cette
touche la demande de re-saisie de la passphrase.
Cela a pour effet de renseigner la chane vide comme passphrase, ce qui revient dire qu'il n'y a pas de passphrase.
Ainsi, lors de la connexion par ssh, l'tape de demande de passphrase est "omise" et la connexion s'effectue sans
demande "de vrification au clavier".

Authentification sans mot de passe


debian:/home/user# ssh login@IP_serveur
Linux lenny.debian.com 2.6.26-1-686 #1 SMP Fri Mar 6 11:08:15 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent


permitted by applicable law.
lenny:~#

IV-3-b - Utilisation de ssh-agent

Ssh-agent est un autre outil dvelopp par OpenSSH permettant d'utiliser l'authentification par change de cls avec
une passphrase sans avoir toujours taper cette dernire.
Une fois ssh-agent dmarr, toutes les commandes ou programmes excuts par ssh sont des sous-processus de
ssh-agent, ne ncessitant plus d'authentification ultrieure.

Ainsi, il ne reste donc plus qu' rcuprer les variables d'environnement, de les mettre en place pour ssh-agent et
demander ssh-agent de s'occuper de notre cl publique et le tour est jou...

rcupration des variables d'environnement


ssh-agent

Les variables d'environnement s'affiche l'cran. Pour les mettre en place pour ssh-agent, il suffit de copier les 3
lignes de l'cran et de les recoller dans la console.

Mise en place des variables d'environnement pour ssh-agent


user@debian:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-TubtX25143/agent.25943; export SSH_AUTH_SOCK;
SSH_AGENT_PID=25984; export SSH_AGENT_PID;
echo Agent pid 25984;

ssh-add
ssh-add ~/.ssh/id_dsa.pub
# ou
ssh-add id_rsa.pub

C'est fini... Enfin presque. En effet, ssh-agent n'est "valable" que dans la console dans laquelle il a t lanc. Ce qui
signifie que si vous fermez votre console et en ouvrez une autre, il faut tout recommencer.

- 14 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

IV-3-c - Automatiser l'utilisation de ssh-agent

Comme il a t dit la fin de la partie IV-3-b, ssh-agent n'est valable que pour la console dans laquelle il est lanc.
Ainsi, pour optimiser l'utilisation de ssh-agent et viter de devoir recommencer le lancement de ssh-agent et la copie
des variables d'environnement chaque fois, des personnes se sont penchs sur le problme (notamment Joseph
M. Reagle) et on crit un bout de code pour pallier ce problme.
Ce code est coller dans le fichier .x_profile de votre HOME. Par exemple, avec un shell en Bash, le fichier en
question est : /home/votre_user/.bash_profile

Code permettant de ne plus avoir lancer ssh-agent chaque nouvelle console. Ce code est placer dans
le .x_profile de votre home
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi

Ainsi, avec ce code, il n'est plus ncessaire de lancer ssh-agent. Vous n'avez qu' copier votre cl sur le serveur si
ce n'est pas dj fait et vous connecter en ssh sans besoin de mot de passe.

- 15 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

V - Un peu de scurit

V-1 - Changer le port d'coute ct serveur

Comme dit plus haut, le port d'coute par dfaut d'un serveur SSH est le port 22. Or, vous remarquerez que trs
souvent, des machines inconnues tentent de se connecter par SSH sur vos serveurs grce des scripts automatiss
testant sur le port 22 un grand nombre d'utilisateurs et mot de passe couramment utiliss tels que root, mysqladmin,
oracle...
Une premire barrire pour viter toute intrusion par SSH est de changer le port d'coute su serveur SSH.

Les ports jusqu' 1024 sont "rservs" pour diverses protocoles et applications. Ainsi, choisissez un port de nombre
suprieur 1024.
Pour changer le port d'coute, il suffit d'diter le fichier de configuration ct serveur : /etc/ssh/sshd_config :

Changement du port d'coute du serveur SSH


vi /etc/ssh/sshd_config

#la ligne idter est :


Port 22

#Changer le 22 en un autre nombre

Lorsque le port de connexion au serveur SSH est chang, diffrent du port par dfaut 22, il est ncessaire de le
renseigner dans la ligne de commande de connexion en utilisant l'option -p.

Par exemple, si vous avez modifier le port par dfaut et choisi d'utiliser le port 2222, la ligne de commande de
connexion devient :

ssh -p 2222 login@serveur_SSH

V-2 - Bloquer l'accs Root par SSH

Les scripts automatiss (notamment) qui tentent que se connecter par SSH sur vos serveurs utilisent principalement
les logins couramment utiliss dont Root fait bien sr partie.
Le fait de laisser l'accs Root par SSH fait gagner une tape un pirate qui souhaite s'introduire dans votre systme.
En effet, le fait de bloquer l'accs Root entrane la ncessit un pirate de trouver un nom d'utilisateur autre,
existant sur votre systme. Sans cela, le pirate dispose donc du nom d'utilisateur, il ne lui reste plus qu' trouver le
mot de passe de Root pour s'introduire.

Cette fois encore, tout se passe dans le fichier de configuration du serveur SSH /etc/ssh/sshd_config. Une option
permet de bloquer l'accs Root, qu'il faut placer "no" :

Option de /etc/ssh/sshd_config permettant de bloquer l'accs Root par SSH


PermitRootLogin no

V-3 - Restreindre l'accs des utilisateurs et/ou groupes spcifiques

La section prcdente montre comment bloquer l'accs SSH au super-utilisateur Root. Cependant, par dfaut, SSH
autorise l'accs tous les utilisateurs de tous les groupes.
De nombreux logiciels crent automatiquement un utilisateur et/ou un groupe spcifique pour les administrer. Ces
utilisateurs possdent un mot de passe par dfaut qui, s'il n'est pas modifi, peut permettre un pirate d'accder
facilement votre machine en utilisant ce couple de login/mot de passe, tel que oracle/oracle.

- 16 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

Il est donc possible et fortement conseill de restreindre l'accs au serveur SSH quelque(s) utilisateur(s) privilgi(s)
de confiance. Plusieurs options sont disponibles pour effectuer cette restriction, au niveau du fichier de configuration
du serveur SSH /etc/ssh/sshd_config :

Restriction d'accs SSH par autorisation limite


AllowUsers Foo Bar
AllowGroups SSH_serv

Cet exemple utilise les options "Allow...". Ces deux options permettent de dfinir les utilisateurs et groupes autoriss
se connecter par SSH. Seuls les utilisateurs Foo et Bar, ainsi que les utilisateurs appartenant au groupe SSH_serv
peuvent donc se connecter. Tous les autres voient leur accs par SSH bloqu.
Il existe une autre faon de restreindre l'accs :

Restriction d'accs SSH par blocage


DenyUsers Foo Bar
DenyGroups SSH_serv

Dans ce nouvel exemple, la restriction ne se fait plus par la dfinition d'une liste d'utilisateurs et groupes autoriss
se connecter mais par la dfinition des utilisateurs et groupes n'ayant pas le droit de se connecter.
Ici, tous les utilisateurs peuvent se connecter par SSH l'exception des utilisateurs Foo et Bar, ainsi que les membres
du groupe SSH_serv.

- 17 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

VI - Transfert de fichiers scuris : SCP

VI-1 - Fonctionnement de la commande scp

Il existe de nombreuses faons de transfrer des fichiers d'une machine une autre, ftp, rcp... mais celles-ci ne sont
pas scurises. OpenSSH propose donc une commande permettant ce transfert travers un canal chiffr, reposant
sur le protocole SSH : scp.

Son utilisation est trs simple. C'est une combinaison de cp et de ssh.


Dans le premier exemple, le fichier /var/log/data.txt est transfr de la machine locale vers le HOME de l'utilisateur
SSH utilis pour la connexion au serveur SSH :

scp /var/log/data.txt login@serveur_SSH:/home/login/

Dans ce second exemple, le fichier /var/log/data.txt est transfr du serveur SSH vers le HOME de l'utilisateur local
"moi" :

scp login@serveur_SSH:/var/log/data.txt /home/moi/

VI-2 - Scp par un port diffrent du port 22

Dans le paragraphe V qui traite de la scurit, il est conseill d'utiliser un port diffrent du port 22 par dfaut d'coute
du serveur SSH. Or, comme il a t vu plus haut, cette action entraine le fait de devoir spcifier le numro du port
utilis lors de la connexion par SSH.
Scp utilisant SSH, il en est donc de mme pour lui, il est ncessaire de renseigner le port utiliser pour contacter le
serveur SSH dans la commande. Cela se fait avec l'option -P.

la commande ssh utilise l'option -p ("p" minuscule) pour spcifier le numro de port utiliser,
alors que scp utilise l'option -P (P majuscule)

scp vers un serveur SSH coutant le port 2222


scp -P 2222 /var/log/data.txt login@serveur_SSH:/home/login/

- 18 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

VII - Utiliser une application graphique distance : X11 Forwarding

OpenSSH permet de se connecter de manire scurise sur un ordinateur distant. Une des diverses options que
propose OpenSSH est le X11 forwarding. Cela consiste faire du dport d'affichage sur une machine cliente et ce,
travers un canal chiffr.
Par exemple, si vous souhaitez travailler chez vous sur une application graphique couteuse, installe uniquement
sur le serveur de votre entreprise, cela est possible de le faire en toute scurit.

Les prrequis sont :

disposer d'une connexion SSH avec le serveur.


disposer d'un serveur graphique sur la machine cliente
un dbit suffisant pour faire transiter les informations graphiques.

Pour le X11 Forwarding, il n'est pas ncessaire d'avoir d'install un serveur graphique sur le
serveur, mais juste sur la machine devant afficher la fentre graphique de l'application.

Comme souvent, pour activer l'option X11 Forwarding sur le serveur SSH, il suffit de mettre "yes" l'option
X11Forwarding dans le fichier de configuration su serveur SSH : /etc/ssh/sshd_config :

Option X11Forwarding
X11Forwarding yes

Pour ouvrir une session SSH sur le serveur en autorisant le dport d'affichage, il faut rajouter l'option -X la commande
de connexion :

ssh -X login@serveur_SSH

De plus amples informations sur le X11 Forwarding sont disponibles dans l'article de Davidbrcz
et ovh : Excution d'applications X distance

- 19 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

VIII - Utiliser SSH en tant que tunnel scuris : TCP Forwarding

Le TCP Forwarding, ou tunnel SSH, permet d'accder distance des services thoriquement inacessibles depuis
l'extrieur du rseau de faon scurise. Par exemple, vous pouvez grce ce procd accder l'intranet de votre
entreprise depuis l'extrieur, vous connecter votre serveur mail ou bien encore traverser un pare-feu.
Pour tre plus clair, voici un schma thorique de ce qui se passe lors d'une communication par un tunnel SSH :

Schma de principe d'un tunnel SSH

Ce schma montre la communication pour accder l'intranet de votre entreprise depuis l'extrieur.

Le serveur Web hbergeant l'intranet de votre entreprise utilise le port 8080.


1234 est le port ct client depuis lequel le tunnel SSH est cr (remarque : utilisez un port suprieur 1024).
Pour des raisons de scurit, le port du serveur SSH a t chang, il est accessible sur le port 2222.

Ainsi pour crer le tunnel SSH, la commande est :

Etablissement d'un tunnel SSH vers le serveur web de l'intranet


ssh -p 2222 -N -L 1234:serveur_web_SSH:8080 login@serveur_web_SSH

Voil, le tunnel est cr. Maitenant pour accder l'intranet, il suffit de changer les paramtres de votre navigateur
web prfr et de renseigner l'utilisation du proxy : localhost par le port : 1234.

- 20 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

Fentre des paramtres de connexion de votre navigateur

- 21 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

IX - Conclusion

Avec cet article, j'ai essay de vous prsenter les nombreuses possibilits d'utilisation de SSH dont l'utilit n'est plus
prouver.

- 22 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

X - Liens utiles

Ces liens peuvent tre utiliss en complment :


- Site officiel d'OpenSSH
- Site officiel de Cygwin
- Manpage de sshd en franais
- Manpage developpez.com

- 23 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/
OpenSSH : Mise en place et description dtaille d'un serveur SSH par Mathieu Androz

Remerciements

Merci Davidbrcz et ovh pour leur article sur l'excution d'applications X distance.
Merci _Mac_ pour la qualit de sa relecture.

- 24 -
Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification
et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'authorisation de l'auteur.
http://mathieu-androz.developpez.com/articles/linux/ssh/